コールバック関数が深すぎることを解決し、並列ロジックを連続して実行する必要があることを解決します。約束は、非同期操作の最終結果を表します。 Promiseと対話する主な方法は、Promiseの最終結果値を受信するために、そのthen()メソッドを介してコールバック関数を登録することです。
約束関連のプロトコルには、PromiseaとPromisea+が含まれます
クラスの約束を定義します
属性キューキューを定義し、空の配列を初期化します[]
プロパティ値の値を定義し、nullを初期化します
プロパティのステータスステータスを定義し、「保留中」(デフォルト値)を初期化します
メンバーメソッドgetqueue()を定義し、属性キューを返します
メンバーメソッドgetStatus()を定義し、属性ステータスを返します
メンバーメソッドsetStatus()、SETステータス、パスパラメーター:ステータス、値を定義する
ステータスが満たされたり拒否されたりすることを判断し、
ステータスプロパティthis.status = statusを設定します
値プロパティthis.value = value ||を設定しますnull、値を渡さない場合、それはnullです
フリーズ変数フリーズオブジェクトを定義します
メンバーメソッドを定義ISFULFILD()を定義して、現在の状態が(完了)かどうかを判断します
メンバーメソッドを定義しますisRected()
メンバーメソッドを定義します()()、現在のステータスマスターが(待機中)を決定します
メンバーメソッドを定義する()、パスパラメーター:onfulfilled custruce callback、refected failed callback
2つのコールバック関数を定義します:ハンドラーオブジェクト、属性が満たされ、拒否されました
ハンドラーオブジェクトの延期されたプロパティ、延期されたオブジェクトを定義する
現在の状態が待っているかどうかを判断します。待っている場合は、ハンドラーオブジェクトをキューキューアレイに入れます
待機状態でない場合は、utilsオブジェクトの手順()メソッド、パラメーター:ステータス、
return handler.deferred.promiseオブジェクト
延期されたクラスを定義します
属性の約束を定義し、Promiseオブジェクトを初期化します
メンバーメソッドResolve()を定義し、パラメーターを渡します:結果結果
Promiseオブジェクトのステータスを待っているように決定し、直接戻る
約束オブジェクトのgetqueue()メソッドを呼び出して、キューアレイを取得します
ループアレイ
// TODOはツールクラスのユーティルを呼び出します。手順()メソッド、パラメーター:「充実した」、要素、ERR情報
Promise ObjectのsetStatus()メソッドを呼び出し、ステータス、パラメーターを設定します:「充実した」、結果
定義メンバーメソッド拒否、パスパラメーター:ERRエラーメッセージ
Promiseオブジェクトのステータスを待っているように決定し、直接戻る
約束オブジェクトのgetqueue()メソッドを呼び出して、キューアレイを取得します
ループアレイ
// todo、ツールクラスのユーティルを呼び出します。手順()メソッド、パラメーター:「拒否」、要素、ERR情報
Promise ObjectのsetStatus()メソッドを呼び出し、ステータス、パラメーターを設定します:「充実した」、結果
ツールクラスのユーティルを定義し、匿名関数を使用してすぐに実行し、オブジェクトを取得します
オブジェクトを返し、オブジェクトにメソッド手順()があります
手順()メソッド、パスパラメーター:タイプ状態タイプ、ハンドラープロセッサアレイ、結果結果
処理機能funcを取得します。
ここに着いたとき、私はめまいがしました。 。 。
使い方:
関数ajaxを定義し、パラメーター:urlパスを渡します
延期されたオブジェクトを入手して、新しいものを出してください
データを返すコールバックメソッドで、データを要求するAjaxのコード
延期されたオブジェクトのResolve()メソッドが正常に呼び出された場合、パラメーター:返品データ
延期されたオブジェクトの拒否()メソッドが失敗と呼ばれる場合、パラメーター:返されたデータ
deferred.promiseオブジェクトを返します
Ajax()メソッドを呼び出して、Promiseオブジェクト、パラメーターを取得します:url、
Promiseオブジェクトのthen()メソッド、パラメーターを呼び出す:匿名関数
Ajax()メソッドを呼び出してPromise Objectを取得し、このオブジェクトを返します
チェーンコールを形成します
JSパート:
<script> // Promise Codeパーツ(犬ベルトを選択しました)Promise = function(){this.queue = []; this.value = null; this.status = 'phends'; //保留中は拒否されました}; proming.prototype.getqueue = function(){return this.queue;}; prometotype.getStatus = function(){return this.status;}; promis.protototototototy.setstatus = fulction(s、fulf '' | = nej ' {this.status = s; this.value = value ||ヌル; this.queue = []; var freezeobject = object.freeze ||関数(){}; freezeObject(this); //約束の状態は不可逆的です} else {{message: "support status:" + s}); }}; promist.prototype.isfulfild = function(){return this.status === 'fulfill';}; promion.prototype.isrejected = function(){return this.status == 'reacted';} promis.prototype.isphending = function(){return this.status = = = 'pend'; function(onfulfild、onrejected){var handler = {'fulfill':onfulfild、 '拒否':onreejed}; handler.deferred = new Deferred(); if(!this.ispending()){//これは最初に約束のステータスを変更し、次にコールバックutils.procedure(this.status、handler、this.value)を追加することが許可されます。 } else {this.queue.push(handler); //同じ約束で複数回呼び出される場合があります。 } varプロシージャ(タイプ、結果){var def = deferred; newresult.then(function(data){// def.resolve(data); //}、function(err){// reject(err); //}); // Xが同じ値で約束を果たしている場合、Xが拒否された場合、同じ理由で約束を拒否します(def、 'fully'); Transition(拒否された '、ERR) {{'message': "type:" + type}); } var queue = this.promise.getqueue(); for(var i = 0、len = queue.length; i <len; i ++){utils.procedure( 'fulfill'、queue [i]、result); } this.promise.setStatus( 'fulfilled'、result);}; deferred.prototype.reject = function(err){if(!this.promise.ispending()){return; } var queue = this.promise.getqueue(); for(var i = 0、len = queue.length; i <len; i ++){utils.procedure( '拒否'、queue [i]、err); } this.promise.setstatus( '拒否'、err);}/*********************************************************************///テスト部品ajax = function(url){var def = new Deferred(); var xhr = new xmlhttprequest(); xhr.onreadeystatechange = function(){if(xhr.readystate === 4){if((xhr.status> = 200 && xhr.status <300)|| xhr.status === 304){def.Resolve(xhr.ResponseText)}エラー({メッセージ:xhr.status})); }}}}}; xhr.open( 'get'、url、true); xhr.send(null); return def.promise;} ajax( 'test.php?act = 1')。 {console.error(err);})PHP:
<?phpif($ _ get ['act'] == 1){echo json_encode(array( "code" => 200));} else if($ _ get ['act'] == 2){echo json_encode(echo json_encode(array( "code" => 300));} if($ _ get 'act' a act '== 3) json_encode(array( "code" => 400));}JavaScriptの約束の単純な学習と使用の上記の要約は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。