这其实是一个非常合理的要求。
我们在没有特定.each
控件的库中使用的工具是.then
:
var a = [1,2,3,4,5];
var p = makeRequest(a.shift()); // use first element
a.forEach(function(el){
p = p.then(function(result){
return makeRequest(el);
});
});
p.then(function(){
// all requests done
});
请注意,我假设您在makeRequest
这里有一个方法,它发出单个请求并返回一个在该请求完成时实现的Promise。
如果您需要使用辅助数组,也可以返回请求的结果:
var a = [1,2,3,4,5];
var results = Array(a.length);
var p = makeRequest(a.shift()).
then(function(res){ results[0] = res;}); // use first element
a.forEach(function(el,i){
p = p.then(function(result){
results[i] = result;
return makeRequest(el);
});
});
p = p.thenResolve(results); // resolve with results, in BB that'd be p.return(results)
p.then(function(results){
// all requests done
console.log(results); // array of response values
}).catch(function(e){
// single failure
});
使用 Bluebird 库的 v2 分支,您可以执行以下操作:
Promise.each([1,2,3,4,5],makeRequest).then(function(results){
// access results
});