勘違いしていました。
返値は、実行完了の順とは関係なく、 Promise が渡された順に並びます。
とあるので、保証されると思います。
実際にやってみました。 処理はtimer1000が一番早く終了しますが、渡した順番の通りtimer3000が配列の1個目に格納されて返されます。
わざわざfor文でawaitを回さなくてもいいということです。
const timer1000 = () => { return new Promise((resolve, reject) => { console.log("start1000"); setTimeout(() => { console.log("finish1000"); resolve("done1000"); }, 1000); }); }; const timer2000 = () => { return new Promise((resolve, reject) => { console.log("start2000"); setTimeout(() => { console.log("finish2000"); resolve("done2000"); }, 2000); }); }; const timer3000 = () => { return new Promise((resolve, reject) => { console.log("start3000"); setTimeout(() => { console.log("finish3000"); resolve("done3000"); }, 3000); }); }; func6 = async () => { let acc = await Promise.all([timer3000(), timer2000(), timer1000()]); console.log(acc); // [ 'done3000', 'done2000', 'done1000' ] };
mapを使った例
func7 = async () => { let arr = [timer3000, timer2000, timer1000]; let ans = await Promise.all( arr.map(async (v, i) => { let ret = await v(); console.log("add"); return ret; }) ); console.log(ans); };