javascript - 如何让for循环等到异步调用成功后再继续

标签 javascript ajax sencha-touch

您好,我正在使用 for 循环和异步 ajax 调用为我的本地商店创建批量更新。

我的问题是,即使我的 ajax 调用仍未成功完成,我的循环仍在继续。

我们如何设法让 for 循环等待单元在继续循环之前等待 ajax 响应的响应?

感谢任何帮助。谢谢!!!

下面是我的示例代码:

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) {

        }
    });

}

最佳答案

请不要使用“for 循环”。相反,在成功回调中增加计数器并重新触发自身。像下面这样的东西。

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
});

关于javascript - 如何让for循环等到异步调用成功后再继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22978843/

相关文章:

javascript - 为什么无法在 JavaScript 中将对象属性设置为空字符串?

javascript - 如何以编程方式使用 grunt 插件?

php - 使用 OOP PHP 进行 Ajax 请求

sencha-touch - 在 Sencha Touch 中加载关联数据而不嵌套

javascript - sencha touch 改变特定列表项的颜色

javascript - 预计会找到已知的 reducer 键之一,而不是 : "user". 意外的键将被忽略

javascript - 如何使用javascript选择随机数0或1?

html - Facebook 元标记不适用于 AJAX 网站

javascript - 数据表上的范围日期搜索 (CodeIgniter)

sencha-touch - 如何使用 Sencha Touch 切换 View 容器?