我有一个 API 调用,我确保数据按照发送的顺序返回。然而,我意识到这并不是我真正想要的,我想确保一次发送一个数据并得到处理。
数据[n]在数据[n+1]发送之前已返回。
原因是:
如果我按照如下所示执行此操作,服务器仍然以随机顺序获取它,因此以随机顺序将数据保存在我的数据库中。 (或者不是随机的,较重的数据处理速度较慢)
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) {
//succes
}).catch (function (errorResponse) {
//error
});
如何确保一次一个数据顺利地发送、处理和返回?
最佳答案
你可以这样做:
var i = -1;
processNextdata();
function processNextdata() {
i++;
if(angular.isUndefined(data[i]))
return;
$http.post('/api/bla/blabla', $httpParamSerializer(data[i]))
.then(processNextdata)
}
更新:
每次结果后回调:
var i = -1;
processNextdata();
function processNextdata() {
i++;
if(angular.isUndefined(data[i]))
return;
$http.post('/api/bla/blabla', $httpParamSerializer(data[i]))
.then(function(result) {
// do something with a single result
return processNextdata();
}, errorCallback);
}
一切完成后回调:
var i = -1, resultData = [];
processNextdata()
.then(function(result) {
console.log(result);
}, errorCallback);
function processNextdata() {
i++;
if(angular.isUndefined(data[i]))
return resultData;
$http.post('/api/bla/blabla', $httpParamSerializer(data[i]))
.then(function(result) {
resultData.push(result.data);
return processNextdata();
}, $q.reject);
}
关于javascript api 调用,按特定顺序发送和处理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36501340/