我不知道是否有一種方法可以水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