ホームページ  >  記事  >  ウェブフロントエンド  >  es6 の Promise の詳細な紹介

es6 の Promise の詳細な紹介

零下一度
零下一度オリジナル
2017-06-26 15:23:451821ブラウズ

Promise

  1. Promise は、非同期操作メッセージを取得できるオブジェクトです。

  2. 特徴: オブジェクトの状態は、外部の世界 (進行中の保留中、解決済みの完了、拒否された失敗) の影響を受けません。非同期操作の結果 現在の状態を判断できます。一度状態が変化すると、再度変化することはありません (保留中から解決済み、保留中から拒否までのみ)。途中でキャンセルされる; コールバック関数がない場合、内部でスローされます。保留中の場合、エラーは外部に反映されません。現在の進行状況を知ることはできません。 then メソッドの Reject 状態のコールバック関数 (つまり then の 2 番目のパラメーター) ですが、このメソッドは前の then でエラーをキャプチャでき、同期書き込み (try/catch) に近いため、catch メソッドを使用します。このメソッドは Promise オブジェクトを返すため、 then メソッドを後で呼び出すことができます。 catch メソッドの中では、エラーもスローされることがあります。 Promise.all メソッドは、複数の Promise インスタンスを新しい Promise インスタンスにパッケージ化するために使用されます。 Promise.all メソッドは配列であってはなりませんが、Iterator インターフェイスを持つ必要があります。また、返される各メンバーは Promise インスタンスです。p1 p2 p3 ステータスが満たされる場合にのみ、p ステータスが満たされます。拒否された場合、 p は拒否されます。

  3. Promise.race も複数になります。 Promise インスタンスは、オブジェクトの状態が変化する限り、それに応じて p の状態も変化します。最初に変更されたオブジェクトが返され、p のコールバック関数に渡されます。

  4. Promise.resolve はオブジェクトを Promise オブジェクトに変換し、ステータスは解決されます

  5. // 将thenable对象转为Promise对象var thenable = {
        then(resolve, reject) {
            resolve(200)
        }
    }var p = Promise.resolve(thenable)
    
    p.then((data) => {
      console.log(data)
    })  // 200

    Promise.reject は Promise オブジェクトを返します、インスタンスのステータスは拒否されます。このメソッドのパラメータは拒否の理由として変更されず、後続のメソッドのパラメータになります。
  6. 2 つの追加メソッド
  7. // donePromise.prototype.done = function(onFulfilled, onRejected) {this.then(onFulfilled, onRejected)
            .catch(function(reason) {
                setTimeout(() => {throw reason}, 0)   
            });
    };// finallyPromise.prototype.finally = function (callback) {
        let P = this.constructor;return this.then(
            value  => P.resolve(callback()).then(() => value),
            reason => P.resolve(callback()).then(() => { throw reason })
        );
    };
  8. done は、いつでも発生する可能性のあるエラーをキャッチし、グローバルにスローするために使用されます。
  9. finally は、共通のコールバックを受け入れて、Promise オブジェクトの状態に関係なく操作を実行するために使用されます。パラメータとしての関数 (実行する必要があります)


以上がes6 の Promise の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。