ホームページ >ウェブフロントエンド >htmlチュートリアル >Javascript Promise 学習ノート_html/css_WEB-ITnose
1. 定義: Promise は、抽象的な非同期処理オブジェクトと、それに対してさまざまな操作を実行するコンポーネントであり、統一されたインターフェイスを使用して非同期処理オブジェクトと非同期処理ルールを標準化します。
2. ES6 Promises 標準で定義されている API:
a) コンストラクター: new を使用してインスタンス化します。
var Promise = new Promise(function(resolve, respect) {…});
b ) インスタンス メソッド: then メソッドを使用して、成功 (解決) と失敗 (拒否) のコールバック関数を設定します。以上です。
c)静的メソッド: all()、resolve( など) )。
3. 約束のステータス。 3 つの状態: 保留中 (初期化)、履行済み、および拒否済み。それ以降に実行される関数は、一度だけ呼び出されることが保証されます。
Promise オブジェクトが解決された場合の onFulfilled の処理
Promise オブジェクトが拒否された場合の処理 onRejected
図 1. Promise 呼び出しの実行プロセス
4. Resolve メソッド:
a )静的メソッド Promise .resolve(value) は、一種の糖衣構文である新しい Promise() メソッドへのショートカットと考えることができます。 Promise.reject(error) も同様です。 thenable オブジェクト jQuery.ajax() などの Promise オブジェクトに変換します。
5. Promise の仕様では、Promise は非同期呼び出しのみを使用できると規定されています。したがって、promise.then は実際には非同期呼び出しです。
6. Promise メソッド チェーン: Promise は、任意のメソッドをメソッド チェーンとして接続できます。例:
.then(taskA).then(taskB).catch(onRejected).then(finalTask);
メソッドチェーンはメソッドを文字列化し、厳密に順序どおりに実行します。
* catch は ECMAScript 3 の予約語であるため、IE8 では使用できないことに注意してください。そのため、通常は、promise["catch"] または then が代わりに使用されます。
図 2. Promise チェーン呼び出しの実行プロセス
7. then を呼び出すたびに、新しく作成された Promise オブジェクトが返されます。1 つの Promise に対して複数の then メソッドを実行することを避け、チェーン呼び出しを使用する必要があります。代わりに法律。
8. Promise と配列: すべての Promise オブジェクトが FulFilled または Rejected になった後に Promise.all([…]) が呼び出されます。 Promise オブジェクト配列内のすべての Promise メソッドが同時に呼び出されます。
Promise.race は、いずれかのメソッドが FulFilled または Rejected になった後に呼び出されます。最初の Promise オブジェクトが Fulfilled になった後、他の Promise オブジェクトの実行はキャンセルされません。
9. Promise の then と catch:
a)Promise.then(onFulfilled, onRejected) を使用する場合、onFulfilled で例外が発生した場合、例外は onRejected でキャッチされません。
b)Promise.then(onFulfilled).catch(onRejected) の場合、then で生成された例外は .catch でキャッチできます
c) .then と .catch の間には本質的に違いはありませんはい、さまざまな機会に使用する必要があります。
10. Deferred は Promise を所有しますが、Deferred と Promise は競合関係にありません。 Deferred を使用するには、最初に Deferred オブジェクトを作成するだけでよく、いつでもsolve メソッドと拒否メソッドを呼び出すことができます。
var deferred = new Deferred();この記事は JavaScript Promise Mini Book (中国語版) からの抜粋です