1. ホーム
  2. javascript

[解決済み] JavaScriptのプロミスと非同期awaitの違いは何ですか?

2022-08-10 18:04:50

質問

私はこれまで ECMAScript 6 と ECMAScript 7 の機能を、モバイルとウェブの両方のアプリケーションですでに使用しています (Babel に感謝します)。

最初のステップは明らかに ECMAScript 6 のレベルでした。私は多くの非同期パターン、約束事(これは本当に有望です)、ジェネレータ(なぜ * 記号なのかはわかりません)などを学びました。 これらのうち、プロミスは私の目的にかなり合っていました。そして、私は自分のアプリケーションでそれらをかなり多く使用しています。

以下は、私が基本的なプロミスをどのように実装したかの例/擬似コードです。

var myPromise = new Promise(
    function (resolve,reject) {
      var x = MyDataStore(myObj);
      resolve(x);
    });

myPromise.then(
  function (x) {
    init(x);
});

時間が経つにつれて、ECMAScript 7 の機能に出会い、そのうちのひとつである ASYNCAWAIT というキーワード/関数があります。これらを併用することで、大きな驚きを得ることができます。私は、いくつかの約束事を async & await . これらはプログラミングスタイルに大きな価値を与えてくれるようです。

もう一度、私の非同期await関数がどのようなものか、疑似コードを示します。

async function myAsyncFunction (myObj) {
    var x = new MyDataStore(myObj);
    return await x.init();
}
var returnVal = await myAsyncFunction(obj);

構文エラーはさておき、どちらも全く同じことをやっていると私は感じています。私はほとんど私の約束のほとんどをasync,awaitsに置き換えることができました。

プロミスが同じような仕事をするのに、なぜasync,awaitが必要なのでしょうか?

async,awaitはより大きな問題を解決しているのでしょうか?それともコールバック地獄の別解なのでしょうか?

先ほど言ったように、私はプロミスとasync,awaitを使用して同じ問題を解決することができます。非同期awaitが解決した具体的なことは何かありますか?

追記です。

私はReactプロジェクトとNode.jsモジュールでasync、awaits、promiseを広範囲に使用してきました。 特に React は早い者勝ちで、ECMAScript 6 と ECMAScript 7 の機能の多くを採用しています。

どのように解決するのですか?

<ブロッククオート

Promisesで似たようなことができるのに、なぜasync,awaitが必要なのですか?async,awaitはより大きな問題を解決するのでしょうか?

async/await は単に非同期コードに同期的な感覚を与えるだけです。これは構文上の糖分の非常にエレガントなフォームです。

単純なクエリやデータ操作であればPromiseはシンプルですが、複雑なデータ操作やその他を含むシナリオに遭遇した場合、コードが単純であれば何が起こっているのか理解しやすくなります。 が見える に見えるだけなら、何が起こっているのか理解しやすくなります(別の言い方をすれば、構文それ自体が、 は回避することができます)。

もし興味があるなら、以下のようなライブラリを使うことができます。 async/await (ジェネレータと並べて)を使うと、同じような感じを与えることができます。このようなものが開発された背景には co が最終的に解決する問題を解決するために開発されました(ネイティブ)。