[10 MINS/DAY]JavaScript Promise[1]


本論文のいくつかの知識点はMDNウェブdocから取っています.もし皆さんが深く研究したいなら、原文[Promiseを使う&[Promiseドキュメントを見に行ってもいいです.
  • Promiseは何のために使いますか?
  • Promiseがない前に、私達は非同期を実現する時普通はコールバック関数を通して、時には業務のロジックが複雑なため、もう一つのコールバックが発生して、コールバック地獄を形成します.ES 6 Promiseの出現は、非同期をよりよく処理する方法を提供する.
  • Promiseはどのように
  • を使いますか?
    シーン:タスクTaskはAステップとBステップに分けられ、Aステップが成功するかどうかは私達がB_を実行するかどうかを決定します.successはまだB_ですfailure
    //               
    function function_A(params, callback_success, callback_failure) {
        // What we need to do in A
        if(success){
            callback_success();
        } else {
            callback_failure();
        }
    }
    function function_B_success() {
        // What we need to do in B after A succeed
    }
    function function_B_failure() {
        // What we need to do in B after A failed
    }
    //   Task
    function_A(params, function_B_success, function_B_failure);
    今私達はPromiseがあって、彼は対象で、1つの非同期の操作の結果は完成しましたかそれとも失敗しましたかを表しています.
    //      
    const promise = function_A(params); 
    promise.then(function_B_success, function_B_failure);
    
    //     
    function_A(params).then(function_B_success, function_B_failure);
  • Promiseの約束は何ですか?
  • Promiseは英語で約束するという意味です.Promiseの約束は3つあります.
  • は、本ラウンドイベントのループが完了する前に、コールバック関数は起動されません.
  • は、非同期動作が完了(成功または失敗)したとしても、その後、thenによって追加されたコールバック関数によって呼び出される.
  • は、thenを複数回起動することにより、挿入順に実行される複数のコールバック関数を追加することができる.
  • イベントのサイクルは何ですか?
  • JSの中には合併モデルがあります.収集を担当して、チームの中の任務を処理します.この処理モデルはイベントサイクルと呼ばれています.皆さんがもっと深く知りたいなら、MDNドキュメントを読んでから一人で事件の話をする機会があります.
  • .then()方法
  • then()は最大2つのパラメータ、Promiseの成功と失敗の場合のコールバック関数が必要です.
    p.then(onFulfilled\[, onRejected\]);
    
    p.then(value => {
      // fulfillment
    }, reason => {
      // rejection
    });
    thenは次のように新しいPromiseオブジェクトを返します.
    const promise1 = doSomething();
    const promise2 = promise1.then(successCallback, failureCallback);
    したがって、thenは新しいプロミセオブジェクトを返します.前のプロミセコールコール関数の状態、つまりドソメットが成功したか失敗したかのいずれかのコールバック関数の実行状態を表して、チェーンが形成されます.私たちはチェーンコールと呼びます.チェーンコールを実現するには、前のプロミセがリターンを行いますので、簡単に矢印関数に書いてはいけません.チェーンコールでは、あるループがエラーを投げたら、直接にcatchにジャンプしますが、catchの後のthenは影響されません.
  • Promiseの3つの状態--pending/fulfillment/rejection
  • Pendingは未決のまま実行中であり、結果が得られなかったFulfillmentはRejectionに成功したとして失敗した.
  • .レスリング方法
  • throw new Error(‘error’);方法は、所与の値で解析されたPromiseオブジェクトを返す.この値がプロミスなら、このプロミスに戻ります.この値がthenable(すなわちthenメソッドを含む)であれば、戻ってきたpromiseはこのthenableの対象に従い、その最終状態を採用する.さもなければ、戻ってきたプロモーションはこの値で完了します.この関数は、クラスのプロミセオブジェクトの複数の入れ子を平らにします.以上はMDNの説明です.簡単に言えば、2つの場合です.
  • valueは数字、文字列、配列などの単純な値です.このときPromise.resoveはpromiseオブジェクトに戻ります.このオブジェクトのthenはvalueに成功しました.
  • valueは、thenableオブジェクト
  • である.
    // original     thenable  
    var original = Promise.resolve(33);
    // promise     resolve   Promise  
    var promise = Promise.resolve(original);
    //     promise       original  thenable     ,            
    promise.then(function(value) {
      console.log('value: ' + value);
    });
    console.log('original === promise ? ' + (original === promise));
    
    /*
    *        ,                
    *  original === cast ? true
    *  value: 33
    */
  • リジェクト()方法
  • 拒否の理由があるPromiseオブジェクトを返します.
    //  reject  Error  ,  resolved     
    function resolved(result) {
      console.log('Resolved');
    }
    //rejected   
    function rejected(result) {
      console.error(result);
    }
    //Error        
    Promise.reject(new Error('fail')).then(resolved, rejected);
    // expected output: Error: fail