【发布时间】:2016-04-26 12:20:04
【问题描述】:
我想知道是否有一种方法可以瀑布式地执行一系列承诺?即,我希望在当前的承诺解决之前不要开始下一个承诺。
我的测试:
import Promise from 'bluebird'
describe('promises waterfall', () => {
const result = []
function doItLater(val, time = 50) => {
return new Promise(resolve => {
setTimeout(() => {
result.push(val)
resolve(val)
}, time)
})
}
it('execute promises one after one resolved', done => {
result.push(1)
const promiseList = [doItLater('a', 100),doItLater('b', 1),doItLater('c')]
result.push(2)
Promise.each(
promiseList,
(output) => {
result.push(output + '-outputted')
}
)
.then(
() => {
result.push(3)
console.log(result)
expect(result).to.eql([ 1, 2, 'a', 'b', 'c', 'a-outputted', 'b-outputted', 'c-outputted', 3 ])
done()
}
)
})
})
更新
对不起,如果我把它弄得太混乱了。我在问如何使我的测试通过。目前我的测试失败 - 实际结果顺序错误:
[ 1,
2,
'b',
'c',
'a',
'a-outputted',
'b-outputted',
'c-outputted',
3 ]
【问题讨论】:
-
@SkinnyJ,OP 询问是否要阻止
Promise,直到解决前一个问题..
标签: javascript asynchronous promise bluebird reduce