JavaScript の Promise と async await の違いは何ですか? 質問する

JavaScript の Promise と async await の違いは何ですか? 質問する

私は使用していますECMAスクリプト6また、私のアプリケーション(モバイルと Web の両方)には、すでに ECMAScript 7 の機能が組み込まれています(Babel のおかげです)。

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

以下は、基本的な約束をどのように実装したかの例/疑似コードです。

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

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

時が経つにつれ、ECMAScript 7 の機能に出会いました。その 1 つがASYNCと のAWAITキーワード/関数です。これらを組み合わせると、すばらしい効果が得られます。私は、いくつかの promise を に置き換え始めましたasync & await。これらは、プログラミング スタイルに大きな価値を追加するようです。

繰り返しになりますが、私の async、await 関数の擬似コードは次のようになります。

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

構文エラー(もしあれば)を除けば、どちらもまったく同じことを行うと私は感じています。ほとんどの promise を async、awaits に置き換えることができました。

Promise が同様の機能を果たすのに、なぜ async、await が必要なのでしょうか?

async、await はより大きな問題を解決しますか? それとも、コールバック地獄に対する単なる別の解決策だったのでしょうか?

先ほど言ったように、promise と async,await を使用して同じ問題を解決することができます。async await によって解決される具体的な問題はありますか?

その他の注意事項:

私は、React プロジェクトと Node.js モジュールで async、await、promise を多用してきました。特に React は早くから ECMAScript 6 と ECMAScript 7 の機能を多く採用してきました。

ベストアンサー1

Promises が同様の機能を果たすのに、なぜ async,await が必要なのでしょうか? async,await はより大きな問題を解決しますか?

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

単純なクエリやデータ操作であれば、Promiseはシンプルですが、複雑なデータ操作などが必要なシナリオに遭遇した場合は、コードが単純に見た目同期的であるかのように(言い換えれば、構文自体はasync/await回避可能な「偶発的な複雑さ」の一種です)。

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

おすすめ記事