Skip to content

Instantly share code, notes, and snippets.

@ayapi
Created October 20, 2017 03:41
Show Gist options
  • Save ayapi/ac0a7bc269c7630403f020d9b12f474e to your computer and use it in GitHub Desktop.
Save ayapi/ac0a7bc269c7630403f020d9b12f474e to your computer and use it in GitHub Desktop.
Promise説明

この関数が呼び出されると、処理が完了するたびに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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment