JS非同期プログラミング小記

1308 ワード

Promiseオブジェクトは非同期プログラミングの解決策であり、従来の解決法であるコールバック関数とイベントよりも合理的で強力である.
Promiseオブジェクトは非同期操作を表しています.Pending(進行中)、Resoloved(完了しました.Fulfilledとも言います.)とRejeced(失敗しました.)の3つの状態があります.
基本的な使い方
var promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/*        */){
    resolve(value);
  } else {
    reject(error);
  }
}).then(function(value) {
  // success
}, function(error) {
  // failure
});;
Promiseコンストラクタは、それぞれresolveおよびrejectである関数をパラメータとして受け入れる.
  • Resoliveは、Promiseオブジェクトの状態を「未完成」から「成功」に変化させ、非同期動作が成功したときに呼び出し、非同期動作の結果をパラメータとして伝える
  • .
  • rejectは、Promiseオブジェクトの状態を「未完成」から「失敗」に変化させ、非同期動作に失敗したときに呼び出し、非同期操作で報告されたエラーをパラメータとして伝達する.
  • then法はパラメータとして2つのコールバック関数を受け入れることができる.最初のコールバック関数はPromiseオブジェクトの状態がReolvedになったときに呼び出します.第二のコールバック関数はPromiseオブジェクトの状態がRejectになったときに呼び出します.このうち、第二の関数はオプションであり、必ずしも提供する必要はない.この2つの関数は、パラメータとしてPromiseオブジェクトから流れる値を受けます.
    then方法は新しいPromiseの例を返します.したがって、チェーン式の書き方、すなわち、then方法の後に別のthen方法を呼び出すことができる.
    Promise.prototype.catch()
    Promise.prototype.catch方法は.then(null,rejection)の別名で、エラーが発生した場合のコールバック関数を指定します.
    getJSON("/posts.json").then(function(posts) {
      // ...
    }).catch(function(error) {
      //    getJSON                  
      console.log('    !', error);
    });