[解決済み] JavaScriptのプロミスと非同期awaitの違いは何ですか?
質問
私はこれまで 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 の機能に出会い、そのうちのひとつである
ASYNC
と
AWAIT
というキーワード/関数があります。これらを併用することで、大きな驚きを得ることができます。私は、いくつかの約束事を
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
が最終的に解決する問題を解決するために開発されました(ネイティブ)。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み】JavaScript版sleep()とは?)
-
[解決済み】PromiseとObservablesの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Async / await vs then パフォーマンスに最適なのはどちらか?
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法