Jquery 按顺序运行ajax调用

Jquery 按顺序运行ajax调用,jquery,ajax,promise,Jquery,Ajax,Promise,我有一个动态确定的ajax调用列表,需要一个接一个地进行调用。既然承诺并不是在所有浏览器中都平等地实现,那么有没有一种方法可以在前一个ajax调用完成后进行每个ajax调用 我试过: var favoritesArray = [1,2,3] //dynamically created by user var arrayOfCalls = $.each(favoritesArray, function each(idx) { var favId = favoritesArray[idx];

我有一个动态确定的ajax调用列表,需要一个接一个地进行调用。既然承诺并不是在所有浏览器中都平等地实现,那么有没有一种方法可以在前一个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();
});

所有呼叫都会运行,但不要等待前一个呼叫完成。有没有办法做到这一点?

您可以使用递归。(我使用setTimeout代替AJAX请求)

函数同步执行(索引,长度){
var favId=favoritesArray[指数];
setTimeout(函数(){

如果(Index不确定您为什么担心它。这些调用似乎都不依赖于以前的调用。
$。当
在跨浏览器中保持一致时,但请注意,
$不会返回任何内容。因此,
每个
数组调用
都将被取消定义。每个调用都会更新相同的列表,如果同时触发调用,则列表中剩余的TEM将不正确且不同,这取决于首先完成的TEM。感谢您关于$的注释。
arrayOfcall.reduce((p,c)=>p.then(c),$.when())。然后(function success(){…
@BenjaminGruenbaum,看起来它应该这样做,但没有。
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);