Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Memanggil Fungsi JavaScript Asynchronous Dengan Berkesan Tanpa Menyekat UI?

Bagaimanakah Saya Boleh Memanggil Fungsi JavaScript Asynchronous Dengan Berkesan Tanpa Menyekat UI?

DDD
DDDasal
2024-11-16 11:39:03410semak imbas

How Can I Effectively Call Asynchronous JavaScript Functions Without Blocking the UI?

Memanggil Fungsi JavaScript Tak Segerak Secara Segerak

Keperluan anda untuk membuat panggilan tak segerak segerak tanpa membekukan UI memberikan masalah yang unik dan mencabar. Malangnya, menyekat pelaksanaan JavaScript tanpa menghentikan UI tidak boleh dilaksanakan.

Satu penyelesaian berpotensi melibatkan penggunaan pembolehubah global untuk pertukaran data. Panggilan balik daripada panggilan tak segerak boleh mengubah suai pembolehubah global yang mengandungi data yang dikehendaki. Sementara itu, mekanisme tinjauan pendapat menyemak pembolehubah global pada selang masa yang tetap sehingga data tersedia.

function doSomething() {
  window.data = null;  // Clear global data
  myAsynchronousCall(param1, callBack);
  var intvl = setInterval(function() {
    if (window.data) {
      clearInterval(intvl);
      console.log(window.data);
    }
  }, 100);
}

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

Walau bagaimanapun, penyelesaian yang lebih sesuai, berdasarkan contoh yang anda berikan, adalah mengikuti amalan terbaik dan menghantar panggilan balik function to doSomething():

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

  myAsynchronousCall(param1, callBack);
}

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

Dengan menghantar fungsi ke doSomething(), anda boleh menggunakan panggilan tak segerak dengan betul tanpa menggunakan teknik yang boleh dipersoalkan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanggil Fungsi JavaScript Asynchronous Dengan Berkesan Tanpa Menyekat UI?. 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