我有以下数据
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(data,function(k,v){ 处理(v.user); })
$.each
将尝试循环process
并且anotherFunction
尚未完成
问题,在进入另一个索引之前,我该怎样做才能确保所有功能都已完成执行?
我听说我可以使用延迟的jquery。
答案 0 :(得分:1)
收集您的AJAX函数返回的promise,如有必要,使用.then
对结果进行后处理,以便调用anotherFunction()
,return
{em} $.ajax
1}}
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
});
注意:在 general 中,对于AJAX调用来说,为错误生成非2xx
返回码是一种很好的做法,而不是“成功”HTTP调用中的错误代码。然后,这允许客户端代码使用正常的AJAX错误处理(即.fail
回调),而不是在AJAX成功处理中检查“错误”。