首頁 >web前端 >js教程 >如何「同步」異步 Javascript 呼叫?

如何「同步」異步 Javascript 呼叫?

Barbara Streisand
Barbara Streisand原創
2024-11-17 13:50:02963瀏覽

How to

同步非同步JavaScript 呼叫

簡介

非同步函數允許我們同時執行任務而執行任務而不阻塞主線程。然而,在某些場景下,可能需要同步呼叫非同步函數,從而有效地阻塞目前執行,直到任務完成。

實作

與流行的相反相信,不可能真正阻止 JavaScript 非同步執行而不影響 UI。模擬阻塞的一種方法是輪詢全域變量,等待回調函數設定它。

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn