Aja*_*nth 5 javascript promise angularjs angular-http angular-promise
我正在开发一个angularJS应用程序,这是我使用这个框架的第一个网站.在我的应用程序中,我需要在for循环中进行$ http调用.在下一次迭代之前的循环中,我想等待前一次调用的响应.什么是最好和最简单的方法来做到这一点.我已经尝试过使用callBack,$ q.all(),. then在所有这些中只有最后一个请求正在通过.请帮忙.
注意:我通过$ http调用的API无法对请求进行排队.
编辑: 我已经尝试了以下两种方法,在这两种情况下,只有最后一个请求成功.你能告诉我我在这里做错了吗?
方法1:
var promiseArray=[];
for(var i=0;i<items.length;i++)
{
var promise=services.Post(items[i]);
promiseArray.push(promise);
}
$q.all(promiseArray).then(data)
{
...
}
Run Code Online (Sandbox Code Playgroud)
方法2:
var promises = [];
for (var i = 0; i < items.length; i++) {
var deffered = $q.defer();
var promise = services.Post(items[i]);
promise.success(function(data) {
deffered.resolve(data);
})
promises.push(deffered);
}
Run Code Online (Sandbox Code Playgroud)
var result = $ q.all(promises);
编辑:2 服务代码:
Services.Post = function(lineItemId, submitUrl) {
var url = (submitUrl) ? submitUrl : Services.serviceUrl;
return $http.post(url, {
"LineItemID": lineItemId
}).
success(function(data, status, headers, config) {
Services.processResponse(data, status, headers, config);
}).
error(function(data, status, headers, config) {
JL('Angular').error('Error response when calling Service ' + config);
});
};
Run Code Online (Sandbox Code Playgroud)
你可以使用$q.when哪个会承诺$http&当它被解决时它会调用里面的函数.then
$q.when(promiseObj).then(callback);
Run Code Online (Sandbox Code Playgroud)
如果存在多个promise,那么$q.all当函数内的所有promise都得到解析时,你可以使用哪个接受promise并调用then函数.
$q.all([promiseObj1, promiseObj2]).then(callback);
Run Code Online (Sandbox Code Playgroud)
更新
我认为你的第一种方法是对的,只是错过了几件事
for 循环条件,它确实创建了一个未定义的额外对象$q.all 里面应该有功能 .then码
var promiseArray=[];
for(var i=0; i < items.length - 1;i++) //<-- change from i<items.length
{
var promise=services.Post(items[i]);
promiseArray.push(promise);
}
$q.all(promiseArray).then(function(data) //<-- it should be function in .then
{
//this will called after all promises get resolved.
});
Run Code Online (Sandbox Code Playgroud)