非同期 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 サイトの他の関連記事を参照してください。