(ルアンYifeng ES6ruから取られた)約束の意味
より合理的かつより強力な - - コールバック関数とイベントの約束は、従来のソリューションよりもソリューション非同期プログラミングです。それが最初に提案し、コミュニティによって実装された、ES6プロミスオブジェクト内のネイティブ標準言語、統一用法、書き込むこと。
いわゆる約束は、それは単に将来的にいつか終わるイベント(通常は非同期操作)の結果を保持するコンテナです。構文的には、約束がオブジェクトである、あなたはそれの非同期操作からメッセージを取得することができます。統一されたAPIを提供することを約束し、非同期操作の様々な同じように扱うことができます。
プロミスオブジェクトは、次の2つの特徴を持っています。
状態は、(1)外部の影響を受けません。保留(進行中)、成就(成功)と拒否(失敗):約束のオブジェクトは、非同期操作を表し、3つの状態があります。非同期操作の結果だけでは、あなたは、他の操作がその状態を変更することはできません現在の状態の種類を決定することができます。これは、英語で「約束」を意味名前の由来である約束、彼は他の手段を変更することはできませんと述べました。
(2)状態変化と、それは変更されない、任意の時点で、この結果を得ることができます。プロミスオブジェクトは状態、2つのだけの可能性を変更:満たされ、拒否になるために保留中の変更から保留から。これら二つのものが凝固状態で発生する限り、それは変更されませんし、その結果を維持します、そして解決と呼ばれる(確定します)。変更が発生した場合は、すぐにこの結果を取得するオブジェクトを約束するコールバック関数を追加します。このイベント(イベント)は、イベントの特徴は、あなたがそれを逃した場合には、耳を傾けて行く、結果ではないが、完全に異なっています。
この章の後半でのみ満たさ解決統一状態を指し、起草を容易にするために、拒否された状態が含まれていないことに注意してください。
プロミスオブジェクトと、プロセスは同期動作と非同期動作が深くネストされたコールバック関数を回避するために、発現させることができます。非同期動作の制御が容易になるように、さらに、プロミスオブジェクトは、統一されたインタフェースを提供します。
約束はまた、いくつかの欠点を有しています。まず第一に、あなたは約束をキャンセルすることはできません新しいが途中でキャンセルすることができないと、それが直ちに実行されます。あなたは、コールバック関数、内部の約束スローエラーを設定しない場合は第二に、それは外部には反応しません。第三に、保留状態で、進捗状況は、現在のステージは、(開始または近づい完了)を知る方法はありませんとき。
特定のイベントが繰り返し発生し続ける場合は、一般的には、ストリームモデルを使用することは約束の展開よりも良い選択です
聞かせて、ステータス= 1 ; 関数STEP1(解決、リジェクト){ にconsole.log(' STEP1スタート' ); もし(ステータス= 1 ){ 解決(' STEP1成功' )。 } 他{ (リジェクト' STEP1エラーを' ); } } 関数STEP2(解決、リジェクト){ にconsole.log(' STEP2スタート' )。 もし(ステータス= 1 ){ 解決(' STEP2-成功'); } 他{ (リジェクト' STEP2エラーを' ); } } 関数STEP3(解決、リジェクト){ にconsole.log(' STEP3スタート' )。 もし(ステータス= 1 ){ 解決(' STEP3成功' )。 } 他{ (リジェクト' STEP3エラーを' ); } } // 调用 新しいプロミス(STEP1).then(関数(ヴァル){ にconsole.log(ヴァル); 戻り 新しいですプロミス(STEP2)。 。})を(関数(ヴァル){ にconsole.log(ヴァル); 戻り 新しい、プロミス(STEP3) } ).then(関数(ヴァル){ にconsole.log(valが); // 新しいプロミス(STEP3)を返します。 });
次のように印刷は次のとおりです。
step1- 開始 STEP1を - 成功 STEP2 - スタート STEP2を - 成功 STEP3 - 開始 STEP3 -success