約束非同期プログラミング

約束非同期プログラミング

 

 A.約束の使用状況

1.約束基本的な使い方

約束インスタンス化されたオブジェクトのコンストラクタ転送機能、非同期タスクを処理するための機能

両方のケースで成功と失敗を処理し、そしてp.thenによる処理結果を得るための解決の2つのパラメータを拒否する

着信コールが、それが唯一の正常な機能、入ってくる異常な状況のない機能を扱うことができる場合は、それが唯一の治療の成功事例であります

 / *   
   私たちは、パラメータを受け取る約束約束を構築するために新しいコンストラクタを使用すると、関数であり、2つのパラメータを渡す:
   非同期操作の実装を成功に失敗した後にコールバック関数コールバックと非同期操作が行われた後、解決は、拒否、それぞれを     * / VARの P = 新しい新しい約束(機能(解決、拒否){
       // 2.ここで非同期タスクのsetTimeout実装するため 
      のsetTimeout(関数(){
         VARフラグに= falseに、
         IF (のフラグ){
           // 3.通常 
          決意を( 'ハロー' ); 
       } {
           // 4.異常 
          ( '間違った'拒否); 
        } 
      } 100
    ); 
    }); 
    //   。後5プロミスインスタンス生成、及び分解状態を指定することができ、次に、コールバックメソッドによって状態を拒否
    //   プロセスでは、直接の当時、プロミスデータオブジェクトを返すことができませんデータを受信することができる 
    (p.then 機能(データ){
     // 解決から正常な結果を得る
      にconsole.log(データ)
    }、関数{(情報)を 
     // 拒否からエラーメッセージを取得
     にconsole.log(情報)を
    })。
/ * 
      ベース約定Ajaxリクエスト
    * / 
    機能queryData(URL){
       VARの P = 新しい新しい約束(機能(解決、拒否){
         VARの XHR = 新新のXMLHttpRequest(); 
        xhr.onreadystatechange = 機能(){
           IF(xhr.readyState! 4 =)のリターンをIF(xhr.readyState == == 200は&& xhr.status 4である。){
             // 通常の処理
            解決(xhr.responseText); 
          } {
             // ハンドル例外
            拒否( 'サーバーエラー' ); 
          } 
        }; 
        xhr.open( 'GET' 、URL); 
        xhr.send(ヌル); 
      }); 
      戻りP; 
    } 
    // 通常の環境
    // queryData(「HTTP:// localhostを:3000 /データ「)
    //    .then(関数(データ){ 
    //      はconsole.log(データ); 
    //    }、機能(情報){ 
    //      はconsole.log(情報)
    //    }); 
    // = =========================== 
    // 複数のリクエストを送信し、その順序をAJAXを確保するために
    //戻り値は、その後の復帰は、通常のオブジェクトである場合。次のチェーンは、引数は、呼び出し側は自動的にオブジェクトが保証チェーンのコールに約束に作成され、この一般的なオブジェクトです
   // リターンはリターンの約束は、次の後、Aで処理され、オブジェクトである場合次いで、この方法は、オブジェクトを返す約束 
    queryData( 'HTTP 3000 /データ:// localhostの' 
      .then(関数{(データ)
        はconsole.log(データ)
        を返す ':// localhostを:3000 / DATAL HTTP' queryData( ; 
      })
      .then(関数(データ){ 
        にconsole.log(データ); 
        戻り queryData( 'HTTP:// localhostを:3000 / DATA2を' ); 
      })
      .then(関数(データ){ 
        にconsole.log(データ)
      });

 

 次に渡された2つの機能の異常に加えて2は、また、取引.catchに変更することができ、同様の効果

  関数FOO(){
       戻り 、新たな新プロミス(関数(解決、拒否){ 
        たsetTimeout(関数(){
           // 解決(123); 
          ( 'エラー'を拒否する); 
        }、 100 ); 
      })
    } 
    のfoo()
      .then(関数(データ){
        // 非同期タスクの正しい結果を得る
        にconsole.log(データ)
      }) キャッチ関数(データ){
        // 異常情報を取得する
        にconsole.log(データ)
      }) 最終的には関数(){
        // 成功が実行されます(ない公式の標準) 
        はconsole.log(「完成」
      });

 

 3.約束共通オブジェクトメソッド

機能queryData(URL){
       返す 新しい新しい約束(機能)拒否、(解決を{
         VARの XHR = 新新のXMLHttpRequest(); 
        xhr.onreadystatechange = 機能(){
           IF!。(= xhr.readyState 4)リターン;
           IF(= xhr.readyState == 200はxhr.statusある4 && =。){
             // ハンドル通常の状況の
            解決(xhr.responseText); 
          } {
             // ハンドル例外が 
            ( 'サーバーエラー'拒否します); 
          } 
        };
        xhr.open( 'GET' 、URL); 
        xhr.send(NULL ); 
      }); 
    } 

    VARの P1 = queryData( 'HTTP:// localhostを:3000 / A1' );
     VARの P2 = queryData(「HTTP:// localhost:3000 / A2 ' );
     VARの P3 = queryData(' HTTP:// localhostを:3000 / A3 ' ); 

    // すべての手段が全て正常に非同期に実行
    //   すべて[P1、P2、P3]とリターンのパラメータを結果は、結果が配列[ "HELLO TOM"、 "HELLO JERRY"、 "HELLO SPIKE"]である対応
    // Promise.all([P1、P2、P3])。次に、(関数(結果){ 
    //    はconsole.log (結果)
    // })

    // かかわらず、他の正常に実行された最速の非同期レースの一つ、
    //P1より速く実行ので、その後の約束()得られた結果「P1」。P2、P3は、実行するために続けたが、結果は破棄されます。
    Promise.race([P1、P2、P3])。次に、(関数(結果){ 
      にconsole.log(結果)
    })

 

 

二つ。(相互作用GET、POSTにサーバーとの)インターフェイスの使用方法を取得

 

三。Axios・インタフェースの使用方法(相互作用取得するには、サーバと、ポスト)

1. JSに対応するインポートファイルにこのインターフェイスが必要

 

 

四。非同期/のawaitは、非同期コードの外観を許可し、より多くの同期コードのように振る舞います

 1.のawaitキーワードは非同期を使用して定義した関数のみを使用することができます

 プロミスとオブジェクトの直接インスタンスの後ろに2のawait 

 3.任意の非同期機能は、我々はその後、連鎖させるプログラムを使用することができることを暗黙の約束を返します。 

 4.電流のawait結果コードを戻した後、後に行われる待つ添加後 

    非同期関数queryDataは(){
       VARの RETの=を待つ新しいプロミス(関数、(決意を拒否){ 
        たsetTimeout(関数(){ 
          解決( 'nihao' 
        }、 1000年); 
      })
      // はconsole.log(ret.data)
      リターンRET; 
    } 
    queryData()。次に、(関数(データ){ 
      にconsole.log(データ)
    })

 

おすすめ

転載: www.cnblogs.com/dlm17/p/12441022.html