简体   繁体   English

如何使循环等待,直到异步调用成功才能继续

[英]How to make for loop wait until Async call was successful before to continue

Hi i am creating a batch update for my local store using for loop and async ajax call. 您好我正在使用for循环和异步ajax调用为我的本地商店创建批量更新。

My problem is that my loop continues even though my ajax call still not yet successfully finished. 我的问题是,即使我的ajax调用仍未成功完成,我的循环仍在继续。

How can we manage to make for loop wait unit the response of the ajax response before continuing the loop? 在继续循环之前,我们如何设法让循环等待单元获得ajax响应的响应?

Any help is appreciated. 任何帮助表示赞赏。 Thanks!!! 谢谢!!!

Below is my sample code: 以下是我的示例代码:

var counter =0;
var totalRow = 3000;
for (var i = 0, l = totalRow; counter <= l; i++) {

    var defectssurl = 'https://test.com/mywcf.svc/GetListAllPaging?id=' + counter;

    Ext.Ajax.request({
        url: defectssurl,
        method: "POST",
        params: '',
        success: function (resp) {

            console.log("load first 500 records");
            var data = Ext.JSON.decode(resp.responseText); //encode Json List

            if (counter == 0) {
                defectsLocalStore.getProxy().clear();
                // Also remove all existing records from store before adding
                defectsLocalStore.removeAll();
            }

            Ext.Array.each(data, function (record) {
                counter = counter + 1;
                defectsLocalStore.add(record);
            });

            defectsLocalStore.sync(); // The magic! This command persists the records in the store to the browsers localStorage

            //records is now same as the total records
            if (counter >= totalRow) {
                pCallback();
            }

            //continue loop
        },
        headers: {
            'Content-Type': 'application/json; charset=utf-8'
        },
        failure: function (resp) {

        }
    });

}

Please don't use "for loop". 请不要使用“for loop”。 Instead in the success callback increase the counter and re-trigger itself. 相反,在成功回调中增加计数器并重新触发自身。 something like below. 类似下面的东西。

function mySyncFunction (counter, totRecords){
   if(counter === undefined) 
     counter = 0;   
   if(counter >=totRecords) return;

   var defectssurl = 'https://test.com/mywcf.svc/GetListAllPaging?id=' + counter;
   Ext.Ajax.request({
     url:defectssurl,
        // snip // your code here
     success: function (resp) {
        // snip // your code here
        counter++;
        mySyncFunction(counter, totRecords);
     }
     // snip // your code here
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM