我不知道是否有一种方法可以水ally地执行一组承诺?即我希望下一个承诺不会在当前承诺解决之前开始。执行一个Javascript数组承诺一个接一个解决
我的测试:
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',直到前一个解决.. – Rayon