我正在尝试从函数发送多个数据请求,并确保仅在从每个函数获得结果后才运行代码

时间:2019-07-04 09:06:57

标签: javascript jquery ajax

我确实通过这篇文章解决了这个问题:How to take an action when all ajax calls in each loop success?。因此,最后我计算了我必须启动该请求的次数,而不是我有一个变量,该变量每次都减小,当它达到0时,我启动该函数。这样我的问题就解决了。 这个问题可能是How to take an action when all ajax calls in each loop success?的重复,因为这样可以回答问题。让我检查一下,然后我不知道,也许我会删除我的问题。我通过循环使用不同的url ajax请求运行相同的函数,并且我想要一种方法来确保仅在函数返回所有数据且仅在继续执行代码后才继续执行代码。使用while时,我只能检查函数是否已发送一次并转发了结果,因此我想确保函数已多次运行,并且对每个请求都得到了响应。这是重复的吗? 如果我通过AJAX请求运行函数,则可以使用when来确保结果已转发,然后才运行下一个代码。

但是,如果我每次使用不同的URL多​​次运行该函数,那么我将无法确保所有请求都已完成,而且我也不知道如何检查。

 var somearray['test','car','menu'];
var array=[];
function test(thislink){
return $.ajax({
  type: "GET",
   url:"http://somewhere"+thislink,

  success: function(response)
  {



    array.push(response);
  }
});

}

for(i=0; i<somearray;i++){
test(somearray[i]);

}

$.when(test()).then(function( ) {
//so first request would run.
console.log(array[0]); //would return something

//while array[1] and higher may return undefined.

console.log(array[1]); // undefined. I rad that I have to use $.when.apply but I don't understand how to do that.
} ); 
    //if i do that when will only make sure first request is success but if I try to get other url's requests probably they will be undefined.

1 个答案:

答案 0 :(得分:0)

如果您熟悉Promises,则可以使用Promise.all()。它会检查所有的Promise是否都为“ good”,并返回您传递的值,否则,例如,如果在其中两个错误中被捕获,则会跳转到catch语句。