我有一些对象,想要执行一些请求 - 每个对象一个。
如何实现它,因为$ http-service在异步模式下执行请求?
与C#中的async / await类似
答案 0 :(得分:1)
您可以在$ http的回调中调用下一个请求。 像这样:
function sendRequestList(objectList) {
if (objectList.length > 0) {
var currentObject = objectList.pop();
$http.get(/* request params here */)
.then(
function() {
sendRequestList(objectList);
},
function() {
sendRequestList(objectList);
}
);
}
}
但是,我不知道如何以您想要的方式实现这一目标。 希望这有帮助。
A +
答案 1 :(得分:1)
如果您希望在继续之前完成所有请求,则可以使用angular的$q服务生成承诺,并仅在每个请求完成时返回结果。
// all of this in a controller injecting $q
function fetchAll(objects) {
var deferred = $q.defer();
var done = 0;
var results = {};
for(var i=0; i < objects.length - 1; i++) {
// a trick to avoid every iteration to share same i value
(function(index) {
$http.get(/* request params here */)
.then(
function(data) {
results[index] = data;
// or results[object.anyProperty] = data;
done++;
// ensure all calls are successful
if (done === objects.length) {
deferred.resolve();
}
},
function() {
deferred.reject();
}
);
})(i);
}
return deferred.promise;
}
// and call it like this
fetchAll(objects)
.then(function success(result) {
// continue your business
}, function error(result) {
// handle error
});