JavaScript 非同期呼び出し例の分析

小云云
リリース: 2018-01-22 09:28:13
オリジナル
1358 人が閲覧しました

この記事では、主に JavaScript の非同期呼び出しの問題について、小さな質問を通して段階的に説明します。興味のある方は、この記事を参照してください。呼び出します。

問題

以下の aa() 関数を変更できます。その目的は、console.log() を使用して、コピー後に必要な値を出力することです


function aa() {
  setTimeout(function() {
    return "want-value";
  }, 1000);
}
ログイン後にコピー

ただし、追加の要件があります:

aa() 関数 自由に変更できますが、console.log() は使用できません

setTimeout パッケージを console.log() ステートメントの実行に含めることはできません

回答

おそらくこれは面接の質問でも何でも。質問の主な目的は、非同期呼び出しの実行結果の処理を調べることです。非同期呼び出しなので、結果を同期的に待つことはできません。非同期操作をシミュレートします。当初、ハンドラーの処理結果の非同期通知(呼び出し)はコールバックで行われていました

function aa(callback) {
  setTimeout(function() {
    if (typeof callback === "function") {
      callback("want-value");
    }
  }, 1000);
}
aa(function(v) {
  console.log(v);
});
ログイン後にコピー

しかし、大規模な非同期アプリケーションでコールバックを使用すると多層の入れ子になりやすいため、一部のメソッドが廃止されました。 「フラット」を改善するために提案されたもので、この部分はチャットの非同期呼び出しの「フラット」を指す場合があります。もちろん、Promise は非常に人気のある方法であり、最終的に ES6 で採用されました。 Promise を使用して次のように実装します。

function aa() {
  return new Promise(resolve => {
    setTimeout(function() {
      resolve("want-value");
    }, 1000);
  });
}
aa().then(v => console.log(v));
ログイン後にコピー

この例に関する限り、前のコールバックの例と似ています。ただし、より推奨されるメソッドである async/await が使用されます。これは ES2017 からサポートされています:

function aa() {
  return new Promise(resolve => {
    setTimeout(function() {
      resolve("want-value");
    }, 1000);
  });
}
async function main() {
  const v = await aa();
  console.log(v);
}
main();
ログイン後にコピー

aa() 定義は Promise メソッドの定義と同じですが、呼び出すときは Use を使用します。 await は非同期で待機します。非同期の結果を待った後、console.log() を使用して処理します。

ここで、await は非同期メソッドでのみ使用できることに注意してください。そのため、await を使用するには、非同期メイン メソッドを定義し、グローバル スコープで呼び出す必要があります。 main メソッドは非同期 (async として宣言されている) であるため、main() 呼び出しの後に他のステートメント (console.log("hello") など) がある場合、このステートメントが最初に実行されます。

async/await 構文を使用すると、同期コードを記述するときと同じように非同期呼び出しを記述することができ、論理的なジャンプを避けてより簡単に記述することができます。 (参考: 地獄から天国へ、Node コールバックが async/await に変更)

もちろん、main() を定義してから main() を呼び出すことは IIFE でカプセル化できます

(async () => {
  const v = await aa();
  console.log(v);
})();
ログイン後にコピー

PHP で非同期マルチスレッド呼び出しを実装する方法


JavaScript について非同期呼び出しメソッド

PHP 非同期呼び出しを実装する方法

以上がJavaScript 非同期呼び出し例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート