非同期 JavaScript 呼び出しを「同期」するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-17 13:50:02
オリジナル
892 人が閲覧しました

How to

非同期 JavaScript 呼び出しの同期

概要

非同期 JavaScript 関数を使用すると、タスクを同時に実行できますメインスレッドをブロックすることなく。ただし、特定のシナリオでは、非同期関数を同期的に呼び出して、タスクが完了するまで現在の実行を事実上ブロックする必要がある場合があります。

実装

一般的なものとは異なります信じられているように、UI に影響を与えずに JavaScript の実行を非同期的にブロックすることは不可能です。ブロッキングをシミュレートする 1 つのアプローチは、グローバル変数をポーリングし、コールバック関数によって設定されるのを待つことです。

function doSomething() {

  // Global variable for callback data
  window.data = null;

  function callBack(d) {
    window.data = d;
  }

  // Start asynchronous call
  myAsynchronousCall(param1, callBack);

  // Start polling interval
  var intvl = setInterval(function() {
    if (window.data) {
      clearInterval(intvl);
      console.log(data);
    }
  }, 100);
}
ログイン後にコピー

このメソッドはセミブロッキング動作を実現しますが、次のような問題が発生する可能性があるため理想的ではありません。

推奨される解決策

可能であれば、コールバック関数を非同期呼び出しに渡し、準備ができたら結果を処理させることが望ましいです。

function doSomething(func) {

  function callBack(d) {
    func(d);
  }

  myAsynchronousCall(param1, callBack);
}

doSomething(function(data) {
  console.log(data);
});
ログイン後にコピー

このアプローチにより、ポーリングのオーバーヘッドが回避され、より効率的な非同期処理が可能になります。

以上が非同期 JavaScript 呼び出しを「同期」するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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