async関数がPromiseをreturnする事を利用して内部でawait
でpendingさせといてmapの返り値をそのままPromise.all()
にブチ込むのよくやる。
index.js
(async () => {
try {
console.log("begin");
console.log(Date.now());
const p = [1, 2, 3].map(async v => {
await new Promise((s, j) => {
setTimeout(() => {
s(true);
}, 1000 * v);
});
});
console.log(p);
await Promise.all(p);
console.log(p);
console.log("end");
console.log(Date.now());
} catch (e) {
console.error(e);
}
})();
$ node index.js
begin
1532527193864
[ Promise { <pending> },
Promise { <pending> },
Promise { <pending> } ]
[ Promise { undefined },
Promise { undefined },
Promise { undefined } ]
end
1532527196868