async-await だと1つずつ完了を待ってしまうが、
Promise.all()は一斉に(疑似的に並列に)処理する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
'use strict'; const sleepXXms = (ms) => { return new Promise((resolve) => { setTimeout(() => { resolve(`${ms}ms待ちました`); }, ms); }); }; const sleep10ms = () => sleepXXms(10); const sleep20ms = () => sleepXXms(20); const sleep30ms = () => sleepXXms(30); const calcRunTimeMs = async (targetFunc) => { const start = new Date(); const result = await targetFunc(); const lapseMs = new Date() - start; return { lapseMs, result }; }; const targetFuncA = async () => { return [await sleep20ms(), await sleep10ms(), await sleep30ms()]; }; const targetFuncB = async () => { return await Promise.all([sleep20ms(), sleep10ms(), sleep30ms()]); }; (async () => { console.log(await calcRunTimeMs(targetFuncA)); console.log(await calcRunTimeMs(targetFuncB)); })(); |
1 2 |
{ lapseMs: 61, result: [ '20ms待ちました', '10ms待ちました', '30ms待ちました' ] } { lapseMs: 31, result: [ '20ms待ちました', '10ms待ちました', '30ms待ちました' ] } |