Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk \"Menyegerakkan\" Panggilan Javascript Asynchronous?

Bagaimana untuk \"Menyegerakkan\" Panggilan Javascript Asynchronous?

Barbara Streisand
Barbara Streisandasal
2024-11-17 13:50:02891semak imbas

How to

Menyegerakkan Panggilan JavaScript Tak Segerak

Pengenalan

Fungsi JavaScript Tak Segerak membolehkan kami melaksanakan tugas secara serentak tanpa menyekat benang utama. Walau bagaimanapun, dalam senario tertentu, mungkin perlu memanggil fungsi tak segerak secara serentak, dengan berkesan menyekat pelaksanaan semasa sehingga tugasan selesai.

Pelaksanaan

Bertentangan dengan popular kepercayaan, adalah mustahil untuk benar-benar menyekat pelaksanaan JavaScript secara tidak segerak tanpa menjejaskan UI. Satu pendekatan untuk mensimulasikan penyekatan adalah dengan meninjau pembolehubah global, menunggu untuk ditetapkan oleh fungsi panggil balik.

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);
}

Walaupun kaedah ini mencapai tingkah laku separa menyekat, ia tidak sesuai kerana ia boleh membawa kepada overhed prestasi yang ketara.

Penyelesaian Pilihan

Jika boleh, adalah lebih baik untuk lulus fungsi panggil balik kepada panggilan tak segerak dan minta ia mengendalikan hasilnya apabila bersedia:

function doSomething(func) {

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

  myAsynchronousCall(param1, callBack);
}

doSomething(function(data) {
  console.log(data);
});

Pendekatan ini mengelakkan overhed pengundian dan membolehkan pemprosesan tak segerak yang lebih cekap.

Atas ialah kandungan terperinci Bagaimana untuk \"Menyegerakkan\" Panggilan Javascript Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn