ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript Promise 学習ノート_html/css_WEB-ITnose

Javascript Promise 学習ノート_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:20:121131ブラウズ

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 (中国語版) からの抜粋です


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。