我有这个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.
*/
};
我可以以某种方式等待接收所有数据,然后将其重新排序为原始排序吗?还是有其他解决方案。
答案 0 :(得分:5)
使用function getAutoCompleteFunction(columnName) {
return function (container) {
container.element.kendoAutoComplete({
filter: "contains",
autoBind: false,
dataTextField: columnName,
dataValueField: columnName,
valuePrimitive: true,
dataSource: container.dataSource
})
}
以正确的顺序获取所有数据。
$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
});
。即使单个XHR POST请求可能无法按原始顺序提供,promiseArray
服务也将跟踪承诺并以正确的顺序填充数据数组(或在第一个错误时解析拒绝)。
答案 1 :(得分:0)
正如Groben所说,你可以为每个请求创建一个承诺数组,然后你可以使用&#34;当&#34;完成所有操作后回调执行。
答案 2 :(得分:0)
$ 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,这些也可以工作......