I have an array of integer ids, such as
var a=[1,2,3,4,5]
and I have a need to perform asynchronous remote calls for each of these ids. Each call is a WebAPI request performed using $resource and presented as promise.
I need to create a function that takes array of these IDs, then initializes recursive promises chain. The chain should result in consequential webapi calls for each of IDs, one by one. These calls should not be parallel but chained.
The function in question returns itself a "main" promise that should be resolved or rejected based on result of asynchronous web calls. That is, if some promise in the recursuion is rejected due to disconnection from server, the main promised also should fail. In normal case, "main" promise must resolve at the point when all requests are completed.
How can I accomplish that in angularjs?
You use reduce
over the array to chain the promises together. There is no need make this recursive.
// for angularjs: var Q = $q.when;
var p = a.reduce(function(prev, el) {
return prev.then(function(arr) {
return makeRequest(el).then(function(res) {
return arr.concat([res]);
});
});
}, Q([]));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With