Agile育成ブログ
未来を変える喜びを
javascript

Promise


Warning: count(): Parameter must be an array or an object that implements Countable in /home/xs638785/agile-software.site/public_html/wp-content/plugins/rich-table-of-content/functions.php on line 490

Promiseオブジェクトは、作成された時点では Pending (待機)状態です。
その後のコールバック関数内で resolve() (解決)された時点で Fulfilled 状態となり、then() が実行されます。
逆に reject() (失敗)が呼び出された時点で Rejected 状態となり、catch() が実行されます
つまり、Promiseオブジェクトのステータスに対応して、それぞれ成功時、失敗時のメソッドを呼ぶことで処理の分岐を実現しています。

Promise.resolve()

Promise.resolve() はPromiseオブジェクトを返すメソッドですが、渡す引数によって返されるPromiseオブジェクトが下記のように変わります。

渡す引数返されるオブジェクトの状態
Promiseオブジェクト
受け取ったPromiseオブジェクトをそのまま返す
thenableなオブジェクト新たなpromiseオブジェクトにして返す
その他の値(オブジェクトやnull等も含む)その値でFulfilledとなった新たなpromiseオブジェクトを作り返す

Promiseオブジェクト

thenableなオブジェクト

then() は次の特徴があります。

  • 新しいPromiseオブジェクトを返す
    • どのようにオブジェクトを生成しているかというと、then に渡された関数が return した値を、Promise.resolve() に渡して新しいPromiseオブジェクトを生成している
  • 非同期で実行される

基本構文

function promiseFunction(value) {
  const promise = new Promise(function(resolve, reject) {  //Promiseオブジェクトを初期化する
    setTimeout(function() {
      if (value !==null) {
        resolve(true);
      } else {
        reject(false);
      }
    }, 1000);
  });
  return promise;  //Promiseオブジェクトを返す
}

promiseFunction()
  .then(function(response) {
    (成功時の処理)
  })
  .catch(function(error) {
    (失敗時の処理)
  })
  .finally(function() {
    (処理結果に関わらず必ず実行したい処理)
  });

You cannot copy content of this page