私は約束事をwaterfallyで実行できる方法があるのだろうか?すなわち、私は、現在の約束が解決されるまで、次の約束を開始しないことを望む。Javascriptの約束を1つ後に実行する
私のテスト:
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()
}
)
})
})
更新
申し訳ありませんが、私はそれがあまりにも混乱してきた場合。私は私のテストをパスする方法を尋ねています。現在、私のテストが失敗した - 実際の結果が間違った順序である:あなたがこの
[doItLater('a', 100),doItLater('b', 1),doItLater('c')]
のような約束を作成すると
[ 1,
2,
'b',
'c',
'a',
'a-outputted',
'b-outputted',
'c-outputted',
3 ]
@SkinnyJ、OPは前のものが解決するまで 'Promise'をブロックするように頼んでいます。 – Rayon