promise 使用bluebird,现在要求按照数组顺序启动异步任务,也即等待一个promise被settled后再执行下一个。 有什么方法吗?难道按照数组写死一个个的then吗?
Promise.map()
Promise.map() 是按顺序迭代数组,但是异步任务仍旧是并发执行的。不符合条件。
递归
var array = ['a1','a2','a3','a4']
return (function handle_array(idx){
idx = idx || 0
if (idx>=array.length) {
return
}
return async_task(id,array[idx])
.then(function(result){
idx++;
return handle_array(idx);
})
})()
利用promise对象迭代
var promise = Promise.resolve()
array.forEach(function(v){
console.log(v)
promise = promise.then(function(){
return async_task(v)
})
.then(function(v){
console.log(v)
})
})
promise.then(function(){
console.log('done')
})
可能还有其他方法。 个人感觉递归更自然一点。 第二种方法要记住promise可以先返回,但是按照顺序被resolved后再执行下一个的。