ホームページ  >  記事  >  ウェブフロントエンド  >  ES6 の Promise について学ぶ

ES6 の Promise について学ぶ

hzc
hzc転載
2020-06-29 10:25:272269ブラウズ

Promise オープニング

JavaScript の非同期メカニズムにより、コールバック ピラミッドという一般的な問題が発生します。

loadImg('a.jpg', function() {
    loadImg('b.jpg', function() {
        loadImg('c.jpg', function() {
            console.log('all done!');
        });
    });
});

Promise 文字通り、約束。 A が B を呼び出し、B が A に約束を返した場合、A は次のように計画を書くことができます: B が結果を私に返すと、A は S1 計画を実行します。逆に、B が A に望む結果を与えなかった場合何らかの理由で、その後、A は緊急計画 S2 を実行します。この場合、すべての潜在的なリスクは A

var resB = B();
var runA = function(){
   resB.then(execS1,execS2);
};

の制御内にあります。A が何かを完了したい場合、B からの応答に依存しない可能性があります。その場合、上記はコードは変更されます Cheng

var resB = B();
var resC = C();
...
 
var runA = function() {
    reqB
        .then(resC, execS2)
        .then(resD, execS3)
        .then(resE, execS4)
        ...
        .then(execS1);
};
 
runA();

ここでは、質問者が予期しない応答をするたびに、異なる処理メカニズムが使用されます。ただし、Promise 仕様ではこれが要求されていない、または処理が実行されないことさえあります。 then) の 2 番目のパラメータを渡さないか、一律に処理してください。

Promise/A 仕様

  • A Promise は 3 つの状態で存在する可能性があります。waiting( pending)、Completed(fulfilled)、Rejected(rejected)

  • Promise のステータスは「待機中」からのみ変更できます。 " "「完了」または「拒否」に進みます。逆変換は許可されていません

  • Promise は then メソッド (then は Promise の核心です)## を実装する必要があります#、その後 Promise を返さなければなりません。その後、同じ Promise を複数回呼び出すことができ、コールバックの実行順序は定義された順序と同じになります。

  • then メソッドは 2 つのパラメータを受け入れます。最初のパラメータは成功したときのコールバックで、もう 1 つは失敗したときのコールバックです。次に、渡された別の Promise を受け入れることができ、また、 「class then」オブジェクトまたはメソッド、つまり thenable オブジェクト

Standard Promise

こちらの記事「html5rocks の JavaScript Promise」を参照してください。現在、Chrome などの高度なブラウザでは、 Promise オブジェクトが組み込まれており、Promise.all()

など、Promise の配列の受け渡しをサポートし、すべての Promise が完了したときに実行される、より多くの操作インターフェイスが提供されています。よりフレンドリーで強力な例外キャプチャを処理します。日常的な非同期プログラミングにはこれで十分です。

サードパーティ ライブラリの Promise

Dojo、jQuery、Zepto、when.js、Q など、今日の人気のある js ライブラリのほとんどは、さまざまな程度で Promise を実装していますが、公開されるもののほとんどは Deferred

オブジェクトです。

End

Promise 実装がどれほど複雑であっても、その使用法は非常に簡単で、体系化されたコードであることがわかります。これからは、コールバックに悩まされる必要はありません。

最後に、Promise はとてもエレガントです!ただし、Promise はコールバックの深いネストの問題を解決するだけです。ジェネレーターは JavaScript 非同期プログラミングを本当に簡素化するものです。Node.js 側では、ジェネレーターを検討することをお勧めします。

推奨チュートリアル: 「

JS チュートリアル

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

声明:
この記事はjianshu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。