、プロミスを導入
1、プロミスは、単にイベントが将来(いつかに終了する保持容器であり、通常は非同期動作)結果
2、プロミスが発現するプロセスの同期動作と非同期動作することができ、避けるために深くネストされたコールバック関数。非同期動作の制御が容易になるように、さらに、プロミスオブジェクトは、統一されたインターフェースを提供する
2つの基本的な使用法を [ 非同期動作環境と関連するパッケージを注使用してインストール }
、AJAXを使用する必要があるノードjsdom環境でjquryパッケージ
構成定数:
// ウィンドウ環境作成 のconst} = {JSDOMインクルードが必要です( 'jsdom' ); のconst {}ウィンドウ = 新新( '<!DOCTYPEのHTML>' JSDOMを); // 取得jQueryの関数 のconst $ =必要( 'jqueryの' )(窓);
1、約束のコンストラクタは、パラメータとしての機能を受け入れ、二つのパラメータの機能は、決意の関数であると機能を拒否 [ JavaScriptエンジンによって指定された引数は、自らの展開しない ]
例えば:
せ約束= 新しいプロミス(リジェクト(解決)=> {})。
、役割の解決機能:
[「成功」への約束から、オブジェクトの状態「未完」解決済み保留中の変更から ]、成功したコール非同期操作、および非同期操作の結果に応じ、パラメータとして渡すアウトする
B、機能の役割を拒否:
[「失敗」を「未完」プロミスからオブジェクトの状態を拒否保留中の変更からパラメータが出渡すよう]、非同期動作が失敗したときに呼び出され、非同期動作のエラーがあってもよい
プロミス例生成後、本方法は、[状態は、次に解決されたコールバック関数を指定した例を使用し、状態を拒否することができる一般的にキャッチを使用し、別々にコールバック関数を指定することが推奨されます ]
次いで(FUN1、fun2)
メソッドパラメータ:
A、FUN1:解決された状態プロミスオブジェクトコールバックに
B、fun2:拒否状態プロミスオブジェクト・コールバック・
キャッチ(FUN) [ 次いで(ヌル、fun2)メソッドエイリアスである ]
方法パラメータ:
楽しい:プロミスコールバックオブジェクト拒否状態
注:
一般的には、直接2つの状態をコールバック関数を使用せずにキャッチ拒否状態のコールバック関数を使用して実行された解決済み状態のコールバック関数を使用して行わ
ついに(楽しいです) [ 約束に関係なく状態の、方法を実行するオブジェクト(] 一般資源回収のために使用)
EG:
約束はしましょう= 新しい新しい約束は((解決、拒否)=> { // 内部パラメータの機能操作は、一般的に非同期に行われる $アヤックス({ :URL '' 、 メソッド: '' 、 データ:[]、 成功(RES){ 解決を( RES); }、 誤差(エラー){ (エラー)を拒否; } }); }); // 非同期で正常に実行するコールバック関数プロミスコンストラクタの()メソッド解決 promise.thenを((RES)=> {} ); // 非同期に実行の約束は、コンストラクタが拒否失敗(コールバック)メソッドを お約束します。キャッチ =>((エラー){}); // 関係なくオブジェクトプロミスの状態の、方法が実行される 約束を。最後に(()=> {}); // 上記の方法は、次の呼び出しの形でも使用することができる // promise.then((RES)=> { ..})キャッチ((エラー )=> {})最後に(()=> {})。
三、プロミス相関関数法
。1、プロミスの解決()
パラメータタイプ:
A、パラメータ約束の一例である { プロミスこのインスタンスを返す ]
例:
// 渡されたプロミスオブジェクト、ノーオペレーションは、例えばプロミスプロミスとして返され LET P = Promise.resolve(約束); p.then((RES) => { にconsole.log(RES); })。キャッチ((エラー)=> { にconsole.log(エラー、 '-------' ); })。最後に(()=> { // かかわらず、最終的には機能実行する非同期動作の成功または失敗の にconsole.logを( '最終的に' ); });
B、オブジェクトパラメータがthenableれる [ thenableオブジェクトは、オブジェクトを参照し、方法を有する ]
この方法は、プロミスは、オブジェクトにオブジェクトthenableうPromise.resolve、その後直ちに、このメソッド次いでthenableオブジェクト実行
例えば:
OBJ = LET { 名: 'zhangsan' 、 次いで(){ (にconsole.log '次いで方法OBJ' ); } }; LETのP = Promise.resolve(OBJ); // 直接実行方法、オブジェクトOBJ 、この方法は、被検体Pのインスタンスで実行されていない ({()=> p.then // このメソッドはない (「次いでP3方法」CONSOLE.LOG ); });
C、thenableパラメータには、オブジェクトまたはオブジェクトではありません、単純ではありません [ 約束は、新しい、状態は解決済みオブジェクトは、コールバック関数を実行返す ]
例:
// コールバック関数の、すなわち実行は次に解決機能を実行する、解決機能を実行する[、プロミスがペンディング状態の状況を解決するために、オブジェクトから変換された] LET P = Promise.resolve(「こんにちは」); // 戻り解決状態プロミス【課題】内部機能実行解決解決プリント列 p.then(()=> { にconsole.log( '解決' ); })。キャッチ(()=> { にconsole.log( '拒否' ); } );
D、はパラメータ [ プロミスオブジェクトが解決ステータスを返す ]
2、Promise.all() { 複数のインスタンスを返すことがプロミスの新しいインスタンスにパッケージない約束 ]
メソッドパラメータ:
パラメータは、インスタンスのプロミスの複数からなるアレイである
方法説明:
プロミス、プロミスは、新しいインスタンスにパッケージのインスタンスの、複数の、そして、新しい包装プロミス例戻り
パラメータアレイ場合、Bをすべてのプロミス・インスタンス状態が解決され、包装の新しいインスタンス状態が解消する状態でした、
コールバックメソッドは、その後に新たなパッケージ決意をインスタンス化し、すべてのインスタンスの成功返却要求データのためのデータパラメータ
パラメータ配列があればC、遭遇したが約束インスタンス状態が拒否され、パッケージの新しいインスタンス状態が状態は拒否され、インスタンスの状態の後ろに見てする必要が、
新しいパッケージング方法のコールバック関数のパラメータのキャッチ例は拒否しない拒否ステータス要求データのための障害が発生したインスタンスパラメータデータ
などを:
// P1、P2、P3インスタンスオブジェクトプロミスのための VAR P = Promise.all([P1、P2、P3]); // [例最速のステータスパラメータの結果に返される配列パラメータ情報の新しいインスタンスの状態Pすなわちアレイ最速のインスタンスオブジェクト情報取得] p.then((RES)=> { にconsole.log(RES); // P1は、情報P2を設定し、分解状態でP3が返さ })。キャッチ((エラー)=> { にconsole.log(エラー) // バック拒否ステータス情報の第一の例に割り当てられたパラメータ })。
3、Promise.race() { プロミスの新しいインスタンスにパッケージ約束複数のインスタンスを返す ]
メソッドパラメータ:
パラメータがインスタンスプロミスの複数からなる配列である
メソッド説明:
A、新しい包装プロミスインスタンス状態パラメータアレイは、情報を返します結果最速のインスタンス状態
B、パッケージングの方法に対応する新しいデータ・メッセージ・インスタンスは、この例に関連する実施例のパラメータプロミス配列の変化で情報を返す
例えば:
// P1、P2、P3インスタンスオブジェクトプロミスのための VAR P = Promise.race([P1、P2、P3]); // [例最速のステータスパラメータの結果に返される配列パラメータ情報の新しいインスタンスの状態Pすなわちアレイ最速のインスタンスオブジェクト情報取得] p.then((RES)=> { にconsole.log(RES); // 最速のデータパラメータ返される配列の成功した実施例 })。キャッチ((エラー)= > { にconsole.log(エラー) // パラメータデータアレイに障害が発生した最速のインスタンスが返さ })。