この関数が呼び出されると、処理が完了するたびにPromiseオブジェクトが返されます。
Promiseオブジェクトが返るのゎ処理が完了してからでゎなくて、すぐに返ります
体感できるょーにするために、execMkdirの非同期処理を仮のものに書き換ぇて、 処理めっちゃ遅ぃゃっをシミュレートしてみます
// promiseTest.js
function execMkdir(name) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`mkdir ${name} success`)
}, 1000) // ぜったぃ1秒ゎかかる処理
})
}
const promise = execMkdir('assets')
promise.then((result) => console.log(result)) // 完了後(1秒後)にログがでるはず
console.log(promise) // ← promiseオブジェクト
これを
node promiseTest.js
って実行してみてくださぃ ログが以下のょぅに出ます
Promise { <pending> }
mkdir assets success
このログの行の出る順番から、 execMkdirの処理が完了する前に、最終行まで進んでることがゎかってもらぇるんじゃなぃかなと思ぃます
あとは、タスク側で先述の関数をループさせ、ループするたびに返されるPromiseオブジェクトを全部キャッチできた時点で「全部終わった」という判断がなされます。
Promise.allで「全部終わった」と判断されるのゎ、Promiseオブジェクトが返ってきたときじゃなくて、引数のiterableの中の全promiseでresolveが呼ばれたときですo ぁと、1個でもrejectが呼ばれるとほかの結果がでてなくても「ぉゎった」ってなりますo
Promise.allも、上のニセexecMkdirをぃじって体感してみると、ゎかりゃすくなるかもしれませんo