jQueryを使用するとき、私は約束がJS非同期プログラミングモードのモードであることを知っていましたが、それとjQueryの繰延オブジェクトの違いを理解していませんでした。会社のプロジェクトが進行するにつれて、バックエンドからデータを受信する必要があるため、それを成し遂げることにしました。
約束
Promiseは、同期操作の形で非同期イベントを操作し、ネストの層ごとに層を避け、チェーンで非同期イベントを操作できるモードです。
JavaScriptの非同期コードを書くとき、コールバックが最も簡単なメカニズムであることがわかっていますが、このメカニズムを使用する場合、コントロールフロー、例外処理、機能セマンティクスを犠牲にし、コールバックピットに陥り、この問題を解決することを約束します。
ES6では、ビルトインAngularJSビルトインQが約束、AngularJS、および次のように約束/仕様を使用する場合:
各タスクには3つの状態があります:保留、満たされ、失敗。
1.給付状態:履行または拒否状態に移行できます。
2.満たされた状態:他の状態に変更することはできず、状態を変更することはできず、価値がある必要があります。
3.拒否された状態:他の州に変更することはできず、状態を変更することはできません。理由がなければなりません。
国家の移転は1回限りです。状態が満たされる(完了)または失敗(失敗/拒否された)がこれ以上変更することはできません。
コードコピーは次のとおりです。
関数oktogreet(name){
return name === 'Robin Hood';
}
関数asyncgreet(name){
var Deferred = $ q.defer();
setimeout(function(){
//この非同期関数fnは将来非同期に実行されるため、モデルの変更を正しく観察しながら、コードを$ applyコールに包みます。
$ scope。$ apply(function(){
deferred.notify( ' + name +'。 ');
if(oktogreet(name)){
Deferred.Resolve( 'Hello、' + name + '!');
} それ以外 {
Deferred.Reject( 'Greating' + name + 'は許可されていません。');
}
});
}、1000);
deferred.promiseを返します。
}
var promise = asyncgreet( 'robin hood');
promise.then(function(greeting){
アラート( '成功:' +グリーティング);
}、function(理由){
アラート( '失敗:' +理由);
}、function(update){
alert( 'get notification:' + update);
});
Q Promiseの基本的な使用
上記のコードは、$ q.defer()によって構築された削除されたインスタンスのいくつかの方法の役割を示しています。非同期操作が成功した場合、Promise Objectの状態は「成功」に変更されます(つまり、保留中から解決に)。非同期操作が失敗した場合、状態は「失敗」に変更されます(つまり、保留中から拒否されるまで)。最後に、deferred.promiseを返すと、then methodを呼び出すことができます。
JSにはネイティブの約束があり、ES6にはすでに約束のオブジェクトがあり、基本的な約束APIはFirefoxおよびChrome 32ベータバージョンに実装されています。
$ q.defferd in angularjs
$ q.defferdを呼び出すことにより、削除されたオブジェクトをチェーンと呼びます。このオブジェクトは、APIを介して3つのタスク状態/仕様に関連付けられています。
Deffered API
オブジェクトが削除された方法
1. Resolve(value):宣言の解決()では、Promise Objectが保留中の状態から変化して解決することを示します。
2. reject(理由):宣言の解決()で、それは拒否された保留状態から約束のオブジェクトが変化することを示します。
3.Notify(value):宣言notify()では、プロミスオブジェクトの満たされていない状態を、解決または拒否する前に複数回呼び出すことができることを示します。
オブジェクトの不足
約束:最後に戻るのは、元の繰延オブジェクトではなく、新しい延期されたオブジェクトPromiseプロパティです。この新しいPromiseオブジェクトは、元のPromiseオブジェクトのステータスのみを観察することができ、繰延オブジェクトの内部状態を変更することはできません。これにより、タスク状態が外部から変更されないようになります。
APIを約束します
延期されたインスタンスを作成すると、新しいPromiseオブジェクトが作成され、参照はdeferred.promiseを通じて取得できます。
Promiseオブジェクトの目的は、延期されたタスクが完了したときに関心のある部分が実行結果を取得できるようにすることです。
約束のオブジェクトの方法
1. then(errorhandler、fulliedhandler、progresshandler):その後の方法は、約束のさまざまな状態を聞くために使用されます。エラーハンドラーは故障状態に耳を傾け、充実したハンドラーは充実した状態に耳を傾け、進行状態のハンドラーは満たされていない状態に耳を傾けます。さらに、Notifyコールバックは0から複数回呼び出され、解決または拒否(解決および拒否)の前に進捗状況の表示を提供できます。
2.Catch(ErrorCallback) - Promise.then(null、errorcallback)へのショートカット
3。最後に(コールバック) - 約束が実行されるか拒否されているかを観察できますが、最後の値を変更する必要はありません。これは、約束が拒否されるか解決されたかに関係なく、リソースを解放したり、役に立たないオブジェクトをクリーンアップするために使用できます。詳細については、ドキュメントの完全な仕様を参照してください。
Promise Chain Callは、thon()メソッドを介して実装できます。
コードコピーは次のとおりです。
promiseb = promisea.then(function(result){
結果を返す + 1;
});
// PromisebはPromiseaを処理した直後に処理されます。
//その値の値は、約束が1増加した結果です
$ qの他の方法
$ q.when(value):変数値を渡す、promise.then()は成功したコールバックを実行します
$ Q.all(約束):複数の約束を正常に実行する前に正常に実行する必要があります。値は配列またはハッシュ値として渡されます。配列内の各値は、インデックスに対応する約束オブジェクトです。