循环一堆异步操作并等待它们全部完成?
Loop over a bunch of asynchronous operations and wait for them all to finish?
(请不要标记为重复或至少指出正确答案,因为我在这里处理多个请求以形成一个数组)。我使用返回的 "data" 值作为数组设置了一些 url 调用。我打算使用这个数组来创建所有这些值的总和。
var data_num=[];
$.each(arr_urls, function( index, value ) {
$.getJSON(arr_urls[index], function (data) {
data_num.push(data);
});
});
alert(data_num);
您可能已经熟悉为什么 这不起作用,an oft linked duplicate 中有很好的解释。但是,这并不完全重复。因为你不是在问这个:
How do I return the response from an asynchronous operation?
你问的更像这样:
How do I loop over a bunch of asynchronous operations and wait for them all to finish?
为此,您首先需要将它们放入一个数组中。像这样:
var my_promises = [];
var data_num = [];
$.each(arr_urls, function( index, value ) {
my_promises.push($.getJSON(arr_urls[index], function (data) {
data_num.push(data);
}));
});
这应该会为您提供一个名为 promises
的数组,其中包含对当前正在执行的异步操作的引用。现在你只需要等待它们全部完成。像这样:
$.when.apply($, my_promises).then(function() {
alert(data_num);
});
这应该将 .when()
函数应用于整个承诺数组,仅在整个数组完成时执行回调。
我假设你不能在服务器端做(这是最好的做法)。
好的,首先要做的事情是:你为什么要做$.getJSON(arr_urls[index]
?如果你想使用 $.each
,你应该使用 value
,或者更好:使用 for 循环
for (var i = arr_urls.length - 1; i >= 0; i--) {
arr_urls[i]
}
此外,您为什么不尝试执行 console.log(data)
以在 JavaScript 控制台上查看返回的内容?如果对站点 URL.
的请求有误,您的浏览器控制台甚至可以告诉您
(请不要标记为重复或至少指出正确答案,因为我在这里处理多个请求以形成一个数组)。我使用返回的 "data" 值作为数组设置了一些 url 调用。我打算使用这个数组来创建所有这些值的总和。
var data_num=[];
$.each(arr_urls, function( index, value ) {
$.getJSON(arr_urls[index], function (data) {
data_num.push(data);
});
});
alert(data_num);
您可能已经熟悉为什么 这不起作用,an oft linked duplicate 中有很好的解释。但是,这并不完全重复。因为你不是在问这个:
How do I return the response from an asynchronous operation?
你问的更像这样:
How do I loop over a bunch of asynchronous operations and wait for them all to finish?
为此,您首先需要将它们放入一个数组中。像这样:
var my_promises = [];
var data_num = [];
$.each(arr_urls, function( index, value ) {
my_promises.push($.getJSON(arr_urls[index], function (data) {
data_num.push(data);
}));
});
这应该会为您提供一个名为 promises
的数组,其中包含对当前正在执行的异步操作的引用。现在你只需要等待它们全部完成。像这样:
$.when.apply($, my_promises).then(function() {
alert(data_num);
});
这应该将 .when()
函数应用于整个承诺数组,仅在整个数组完成时执行回调。
我假设你不能在服务器端做(这是最好的做法)。
好的,首先要做的事情是:你为什么要做$.getJSON(arr_urls[index]
?如果你想使用 $.each
,你应该使用 value
,或者更好:使用 for 循环
for (var i = arr_urls.length - 1; i >= 0; i--) {
arr_urls[i]
}
此外,您为什么不尝试执行 console.log(data)
以在 JavaScript 控制台上查看返回的内容?如果对站点 URL.