如何等待所有数据成功回调的多个承诺
How to Wait for Multiple Promises for All Data Success Callbacks
我有这个 API 电话,但我在 successCallback
中收到的数据与发送时的顺序不同。
for (var i = 0; i < data.length; i++) {
$http.post('/api/bla/blabla', $.param(data[i]))
.then(successCallback, errorCallback);
}
var successCallback = function (response) {
/*
receive data in random order.
assume its being send / handled so fast, thats its random
which gets done first.
*/
};
我能否以某种方式等待接收到所有数据,然后将其重新排序为原始顺序?或者有其他解决办法吗
正如 Groben 所说,您可以为每个请求创建一个承诺数组,然后您可以使用 "when" 回调在所有完成时执行。
使用$q.all
以正确的顺序获取所有数据。
var promiseArray = [];
for (var i = 0; i < data.length; i++) {
var dataPromise = $http.post('/api/bla/blabla', $httpParamSerializer(data[i]))
.then (function (response) {
//return data for chaining
return response.data;
})
;
promiseArray.push(dataPromise);
}
$q.all(promiseArray).then(function (dataArray) {
//dataArray will be in original order
//process results here
}).catch (function (errorResponse) {
//log error
});
promiseArray
将以正确的顺序创建。即使单个 XHR POST 请求可能不会按原始顺序提供服务,$q
服务也会跟踪承诺并以正确的顺序填充数据数组(或解决第一个错误时被拒绝的问题)。
$http.get('/someUrl', config).then(successCallback, errorCallback);
$http.post('/someUrl', data, config).then(successCallback, errorCallback);
你可以试试这些
请注意响应对象具有以下属性:
data – {string|Object} – The response body transformed with the transform functions.
status – {number} – HTTP status code of the response.
headers – {function([headerName])} – Header getter function.
config – {Object} – The configuration object that was used to generate the request.
statusText – {string} – HTTP status text of the response.
这些也可以工作,具体取决于 API 您正在处理的...
我有这个 API 电话,但我在 successCallback
中收到的数据与发送时的顺序不同。
for (var i = 0; i < data.length; i++) {
$http.post('/api/bla/blabla', $.param(data[i]))
.then(successCallback, errorCallback);
}
var successCallback = function (response) {
/*
receive data in random order.
assume its being send / handled so fast, thats its random
which gets done first.
*/
};
我能否以某种方式等待接收到所有数据,然后将其重新排序为原始顺序?或者有其他解决办法吗
正如 Groben 所说,您可以为每个请求创建一个承诺数组,然后您可以使用 "when" 回调在所有完成时执行。
使用$q.all
以正确的顺序获取所有数据。
var promiseArray = [];
for (var i = 0; i < data.length; i++) {
var dataPromise = $http.post('/api/bla/blabla', $httpParamSerializer(data[i]))
.then (function (response) {
//return data for chaining
return response.data;
})
;
promiseArray.push(dataPromise);
}
$q.all(promiseArray).then(function (dataArray) {
//dataArray will be in original order
//process results here
}).catch (function (errorResponse) {
//log error
});
promiseArray
将以正确的顺序创建。即使单个 XHR POST 请求可能不会按原始顺序提供服务,$q
服务也会跟踪承诺并以正确的顺序填充数据数组(或解决第一个错误时被拒绝的问题)。
$http.get('/someUrl', config).then(successCallback, errorCallback); $http.post('/someUrl', data, config).then(successCallback, errorCallback); 你可以试试这些 请注意响应对象具有以下属性:
data – {string|Object} – The response body transformed with the transform functions.
status – {number} – HTTP status code of the response.
headers – {function([headerName])} – Header getter function.
config – {Object} – The configuration object that was used to generate the request.
statusText – {string} – HTTP status text of the response.
这些也可以工作,具体取决于 API 您正在处理的...