0

我有以下数据

var data = [{user:"somename"}, {user:"anothername"}];

我有这个处理那个的函数,比如说检查用户是否存在

function process(user) {
    $.ajax({
        url: 'http://domain.com/api',
        success: function(result) {
            if(result == 'success')
                anotherFunction();
            else 
                console.log('error');
        }
    })
}

function anotherFunction() {
     $.ajax({

        // do stuffs
     })
}

$.each(数据,函数(k,v){进程(v.user);})

$.each尝试循环,甚至processanotherFunction没有完成

问题,在转移到另一个索引之前,我能做些什么来确保所有函数都已完成执行?

我听说我可以使用 jquery deferred。

4

1 回答 1

1

收集您的 AJAX 函数返回的承诺,如有必要,对结果进行后处理,.then以便它调用anotherFunction() 也必须return$.ajax.

function process() {
    return $.ajax(...).then(function(result) {
        if (result === 'success') {
             return anotherFunction();
        } else {
             return null;  // this might need to change...
        }
    });
}

function anotherFunction() {
    return $.ajax(...);
}

var promises = [];
$.each(data, function(k, v) {
    promises.push(process(v.data));
}

然后等待所有的承诺得到解决:

$.when.apply($, promises).done(function() {
      // all done here
});

注意:一般来说,AJAX 调用为错误生成不2xx返回代码是一种很好的做法,而不是“成功”HTTP 调用中的错误代码。然后,这允许客户端代码使用正常的 AJAX 错误处理(即.fail回调),而不是检查 AJAX 成功处理中的“错误”。

于 2013-04-29T11:26:30.237 回答