[TypeScript] Promise は何回 await しても同じ結果を返す
この記事は最終更新日から5年以上が経過しています。
TL;DR
- Promise は await した時に動き始めるわけではない
- Promise を返すメソッドを実行した時点で処理が始まる
- Promise は何回 await しても同じ結果を返す
code
const asyncFunc1 = async () => {
console.log(' |----> asyncFunc1:start')
await new Promise(resolve => setTimeout(resolve, 1000))
console.log(' `-> asyncFunc1:end')
return Promise.resolve('async1')
}
const asyncFunc2 = async () => {
console.log(' |----> asyncFunc2:start')
await new Promise(resolve => setTimeout(resolve, 2000))
console.log(' `-> asyncFunc2:end')
return Promise.resolve('async2')
}
const syncFunc = () => {
console.log(' |----> syncFunc:start')
console.log(' `-> syncFunc:end')
return Promise.resolve('sync')
}
const main = async () => {
console.log('main:start')
console.log('promises:start')
const promises = [asyncFunc1(), asyncFunc2(), syncFunc()]
console.log('promises:end')
console.log('result1:start')
const result1 = await Promise.all(promises)
console.log('result1:end:' + result1)
console.log('result2:start')
const result2 = await Promise.all(promises)
console.log('result2:end:' + result2)
console.log('main:end')
}
main()
実行結果
$ npx ts-node ./promise_sample.ts
main:start
promises:start
|----> asyncFunc1:start
|----> asyncFunc2:start
|----> syncFunc:start
`-> syncFunc:end
promises:end
result1:start
`-> asyncFunc1:end
`-> asyncFunc2:end
result1:end:async1,async2,sync
result2:start
result2:end:async1,async2,sync
main:end022
雑感
Promise は await した時に動き始めると思っていたので、並列処理の効率あげるの結構大変なのではと思っていたが調べてみたら勘違いだった。ちゃんと公式ドキュメント読んでから始めればよかった。
[TypeScript] Promise は何回 await しても同じ結果を返す