プロミスオブジェクトである何1.?
より合理的かつより強力な- -コールバック関数とイベントの約束は、従来のソリューションよりもソリューション非同期プログラミングです。約束は、ネイティブオブジェクトを提供します。プロミスイベントは、単純にのみ実行後に保持している容器です。レベルは、文法、約束がオブジェクトである、あなたはそれの非同期操作からメッセージを取得することができます。統一されたAPIを提供することを約束は、さまざまな非同期操作は同じように扱うことができます。
2.Promiseオブジェクト機能
(1)まず約束外部からの影響から、オブジェクトの状態が無料。:第二約束のオブジェクトは、次の3つの状態がある、非同期操作を表しpending
、(継続中)はfulfilled
(して成功した)とrejected
(失敗します)。非同期操作の結果のみが、あなたはどのような現在の状態を決定することができ、他の操作は、その状態を変更することはできません。
(2)ステータスの変更後、変更されない、任意の時点で、この結果を得ることができます。Promise
オブジェクトの状態が変化し、2つだけの可能性:からpending
への変更fulfilled
やからpending
ターンrejected
。限り、これら二つのことが起こるように、状態が固定され、変更することはないであろうし、その結果を維持します、そして、(確定)解決と呼ばれます。変更が発生した場合は、再度Promise
オブジェクトのコールバック関数を追加し、すぐにこの結果を取得します。
3.Promiseの使用状況
1.次のように基本的な構文は次のとおりです。
VARの約束は= 新しい新しい約束(機能(解決、拒否を){ // ...いくつかのコード IF(/ * コード実行の成功* / ){ 解決(値); } 他{ 拒否(エラー); } }); 約束 。次いで、(関数(){ / * コード次の実装を成功させる* / }) 。キャッチ(関数(){ / * コードに続く失敗* / })
パラメータは、()は、2つのパラメータの関数が他の拒否解決でプロミスの関数であり、これら2つのパラメータは関数の一種です、
この関数は、その後にパラメータとして渡され、成功したコール非同期操作、および非同期操作の結果に、(すなわち、解決係属中から変更)「成功」に「未完」の約束からのオブジェクトの状態の役割を解決することです方法。
reject
この関数は返すPromise
非同期操作が失敗したときに呼び出され、非同期動作エラーがキャッチのメソッドにパラメータとして渡すことができる(すなわち、拒否された保留中の変更)「失敗」に「完了していない」からオブジェクトの状態を。
次の動きは栗です。
<スクリプト> VARの約束= 新しいプロミス(関数(決意、リジェクト){ VAR NUM = Math.ceil(Math.random()* 100 ); はconsole.log( 'NUM' 、NUM); 場合(NUM%2 == 0 ){ にconsole.log( '解決' 、NUM); 解決(NUM); } 他{ にconsole.log( '拒否' 、NUM); (NUM)を拒否; } })。 promise.then(関数(NUM){ にconsole.log( 'を' 、NUM)。 }) 。キャッチ(機能(NUM){ はconsole.log( 'キャッチ' 、NUM); }) はconsole.log( 'こんにちは!' ); </ SCRIPT>
その出力は次のとおりです。
オブジェクトは、その実行順序出力「こんにちは後の「NUM」の出力、ということ再び実行を定義したときに「その後」だけの約束、約束への非同期呼び出しの後です!」。
使用すると()メソッド:
()メソッドは、主にアウト渡す受信したパラメータを解決するために使用され、次いで、その後、実際には第2のパラメータタイプの機能もあり、2番目のパラメータはオプションであり、それがアウト渡された受信パラメータを拒否するために使用されます。
その後、()メソッドが戻って新しい約束である手段は、チェーンのメソッド呼び出しをサポートする、オブジェクトことを言及する価値があります。最初の栗の場合:
<スクリプト> VARの約束= 新しいプロミス(関数(決意、リジェクト){ VAR NUM = Math.ceil(Math.random()* 100 ); はconsole.log( 'NUM' 、NUM); 場合(NUM%2 == 0 ){ にconsole.log( '解決' 、NUM); 解決(NUM); } 他{ にconsole.log( '拒否' 、NUM); (NUM)を拒否; } })。 promise.then(関数(NUM){ にconsole.log( 'を' 、NUM)。 リターン 1 ; 。})を(関数(NUM){ にconsole.log( 'then1' 、NUM); }) 。キャッチ(機能(NUM){ はconsole.log( 'キャッチ' 、NUM); リターン 11 ; }) はconsole.log( 'こんにちは!' ); </ SCRIPT>
次のように出力されます。
戻り値は、第一の伝達関数の値は、第2の方法第2のパラメータとして渡されます。
使用してキャッチ()メソッド:
非同期操作がエラーをスローした場合、ステータスの変更はrejected
、呼び出しますcatch
。このエラーに対処するために、メソッド指定されたコールバック関数を。キャッチの異なる方法、その後の連鎖メソッド呼び出しはサポートされていません。
使用して最終的には()メソッド:
finally
かかわらず、プロミス最終状態を標的化するために使用される方法の動作は、指定され実行されます。この方法は、任意のパラメータを受け入れない決意やパラメータは、メソッドが動作しない拒否渡しの方法のいずれか、約束が出て渡す引数を受け入れることができません。