我有一个动态确定的ajax调用列表,需要一个接一个地进行。由于承诺并未在所有浏览器中同等实施,有没有办法在上一次完成之后进行每次ajax调用?
我试过了:
var favoritesArray = [1,2,3] //dynamically created by user
var arrayOfCalls = $.each(favoritesArray, function each(idx) {
var favId = favoritesArray[idx];
return $.ajax({ url: '/favorites/' + favId, type: 'DELETE' });
});
$.when(arrayOfCalls)
.then(function success() {
doStuff();
});
所有通话都在运行,但不要等待前一通话结束。有没有办法实现这个目标?
答案 0 :(得分:0)
您可以使用递归。 (我使用setTimeout代替AJAX请求)
function syncExecute(index,length){
var favId = favoritesArray[index];
setTimeout(function(){
if(index<length){
syncExecute(index+1,length);
console.log(index);
}else{
console.log("All Call Executed");
}
},5000);
}
syncExecute(0,favoritesArray.length);
演示:https://jsfiddle.net/b18vo9ds/
你可以用AJAX请求替换setTimeout,并且在AJAX请求成功时调用该函数。