Rumah hujung hadapan web Soal Jawab bahagian hadapan Bagaimana untuk melaksanakan panggilan balik tak segerak JavaScript

Bagaimana untuk melaksanakan panggilan balik tak segerak JavaScript

May 12, 2023 pm 04:05 PM

JavaScript ialah bahasa satu utas, iaitu, ia hanya boleh melaksanakan satu tugas pada satu masa. Ini bermakna dalam sesetengah kes, jika kami memanggil fungsi secara langsung dalam JavaScript yang mungkin mengambil masa yang lama, halaman tersebut akan membeku dan menjadi tidak bertindak balas. Untuk menyelesaikan masalah ini, kami perlu menggunakan panggilan balik tak segerak untuk membenarkan JavaScript meneruskan pemprosesan transaksi lain sambil melaksanakan tugas jangka panjang.

Di sini, kami akan memperkenalkan cara menggunakan panggilan balik tak segerak JavaScript dan cara menggunakan panggilan balik untuk mengoptimumkan prestasi JavaScript.

  1. Apakah panggilan balik tak segerak?

Panggil balik tak segerak merujuk kepada menghantar fungsi lain sebagai parameter kepada fungsi yang melaksanakan tugas apabila melaksanakan tugas. Fungsi ini akan dipanggil apabila tugas pelaksanaan selesai supaya ia boleh menerima keputusan yang dikembalikan oleh tugas pelaksanaan. Pendekatan ini meningkatkan prestasi dengan membenarkan JavaScript meneruskan pemprosesan tugasan lain semasa ia sedang dilaksanakan.

Sebagai contoh, kita boleh menggunakan panggilan balik tak segerak untuk mendapatkan data borang yang diserahkan oleh pengguna di tapak web:

function submitForm(form, callback) {
  // 验证表单数据、生成提交数据等操作
  var formData = generateFormData(form);

  // 发送Ajax请求
  sendRequest('POST', '/submit', formData, function(response) {
    callback(response);
  });
}
Salin selepas log masuk

Dalam contoh di atas, fungsi submitForm() menerima parameter form dan callbackFungsi sebagai parameter. Apabila operasi selesai, fungsi callback akan dipanggil supaya ia boleh menerima keputusan yang dikembalikan daripada menjalankan operasi. Ini bermakna kita boleh melaksanakan tugas lain apabila borang diserahkan dan tidak memanggil fungsi panggil balik untuk mengendalikan keputusan sehingga operasi selesai dan keputusan dikembalikan.

  1. Bagaimana untuk menggunakan panggilan balik tak segerak?

Dalam JavaScript, terdapat pelbagai cara untuk menggunakan panggilan balik tak segerak. Berikut ialah beberapa kaedah biasa:

2.1. Objek Tertunda jQuery

jQuery menyediakan cara mudah untuk mengurus tugas tak segerak dan fungsi panggil baliknya: Objek tertunda.

Objek tertunda ialah objek dengan banyak kaedah (seperti done() dan fail()) yang membolehkan kami mentakrifkan fungsi panggil balik untuk tugas tak segerak. Apabila tugas tak segerak selesai, kita boleh menggunakan kaedah resolve() untuk memanggil fungsi panggil balik penyelesaian, atau kaedah reject() untuk memanggil fungsi panggil balik kegagalan.

Sebagai contoh, kod berikut menggunakan objek jQuery Deferred untuk memuatkan imej:

function loadImage(url) {
  var defer = $.Deferred();
  var img = new Image();

  img.onload = function() {
    defer.resolve(img);
  };

  img.onerror = function() {
    defer.reject('Failed to load image at ' + url);
  };

  img.src = url;

  return defer.promise();
}

loadImage('http://example.com/image.jpg')
  .done(function(img) {
    console.log('Image loaded.', img);
  })
  .fail(function(error) {
    console.error(error);
  });
Salin selepas log masuk

Dalam kod di atas, fungsi loadImage() mengembalikan hasil operasi tak segerak melalui objek Tertunda. Apabila operasi selesai, jika berjaya, kami menggunakan kaedah defer.resolve() untuk memanggil fungsi panggil balik selesai done(), jika tidak, kami menggunakan kaedah defer.reject() untuk memanggil fungsi panggil balik kegagalan fail().

2.2. Objek Promise

Objek Promise ialah konsep yang baru dicadangkan dalam ES6, yang membolehkan kami memproses status penyelesaian tugas tak segerak. Kita boleh merangkum tugas tak segerak dalam objek Promise dan menggunakan kaedah then() untuk mentakrifkan fungsi panggil balik kejayaan dan kegagalan.

Sebagai contoh, kod berikut menggunakan objek Promise untuk memuatkan imej:

function loadImage(url) {
  return new Promise(function(resolve, reject) {
    var img = new Image();

    img.onload = function() {
      resolve(img);
    };

    img.onerror = function() {
      reject('Failed to load image at ' + url);
    };

    img.src = url;
  });
}

loadImage('http://example.com/image.jpg')
  .then(function(img) {
    console.log('Image loaded.', img);
  })
  .catch(function(error) {
    console.error(error);
  });
Salin selepas log masuk

Dalam kod di atas, fungsi loadImage() mengembalikan objek Promise dan apabila operasi tak segerak selesai, kami gunakan resolve() Kaedah memanggil fungsi panggil balik kejayaan then(), jika tidak, kami menggunakan kaedah reject() untuk memanggil fungsi panggil balik kegagalan catch().

  1. Bagaimana untuk mengoptimumkan kod?

Semasa menggunakan panggilan balik tak segerak boleh meningkatkan prestasi JavaScript, jika digunakan secara salah, ia boleh menyebabkan kod bersepah dan mengurangkan kebolehbacaan. Berikut ialah beberapa amalan terbaik untuk diikuti apabila menggunakan panggilan balik tak segerak:

3.1 Elakkan sarang panggilan balik yang berlebihan

Apabila kita menggunakan berbilang panggilan balik tak segerak, kita boleh menghadapi masalah dalam neraka panggil balik. Untuk mengelakkan masalah ini, kita boleh menggunakan objek Promise atau sintaks async/menunggu untuk mengelakkan berbilang peringkat sarang.

Sebagai contoh, kod berikut menggunakan async/menunggu untuk memuatkan imej:

async function loadImage(url) {
  return new Promise(function(resolve, reject) {
    var img = new Image();

    img.onload = function() {
      resolve(img);
    };

    img.onerror = function() {
      reject('Failed to load image at ' + url);
    };

    img.src = url;
  });
}

async function main() {
  try {
    var img = await loadImage('http://example.com/image.jpg');
    console.log('Image loaded.', img);
  } catch (error) {
    console.error(error);
  }
}

main();
Salin selepas log masuk

Dalam kod di atas, kami mengisytiharkan fungsi async/await dan fungsi loadImage() menggunakan main() sintaks. Menggunakan kata kunci await, kami menunggu operasi tak segerak selesai dan menggunakan hasil yang dikembalikan setelah operasi selesai.

3.2. Elakkan panggilan balik neraka

Jika kami perlu menghantar parameter antara berbilang tugas tak segerak dan mengelakkan sarang panggilan balik, kami boleh menggunakan Janji JavaScript dan sintaks async/menunggu untuk mengelakkan panggilan balik neraka. Kod berikut menunjukkan pendekatan ini:

async function multiply(x, y) {
  return x * y;
}

async function square(n) {
  return multiply(n, n);
}

async function cube(n) {
  var squareResult = await square(n);

  return multiply(squareResult, n);
}

async function main() {
  try {
    var result = await cube(3);
    console.log(result);
  } catch (error) {
    console.error(error);
  }
}

main();
Salin selepas log masuk

Dalam kod di atas, kami mengisytiharkan fungsi async/await, multiply() dan square() menggunakan cube(). Kami menggunakan kata kunci await untuk menghantar parameter antara fungsi.

  1. Ringkasan

Panggil balik tak segerak ialah konsep pengaturcaraan penting dalam JavaScript. Ia meningkatkan prestasi JavaScript dengan membenarkan kami meneruskan tugasan lain sambil melakukan operasi yang panjang. Menggunakan sintaks Promise dan async/wait boleh membantu kami mengelakkan panggilan balik neraka dan meningkatkan kebolehbacaan kod.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan panggilan balik tak segerak JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apa itu useeffect? Bagaimana anda menggunakannya untuk melakukan kesan sampingan? Apa itu useeffect? Bagaimana anda menggunakannya untuk melakukan kesan sampingan? Mar 19, 2025 pm 03:58 PM

Artikel ini membincangkan useeffect dalam React, cangkuk untuk menguruskan kesan sampingan seperti pengambilan data dan manipulasi DOM dalam komponen berfungsi. Ia menerangkan penggunaan, kesan sampingan yang biasa, dan pembersihan untuk mencegah masalah seperti kebocoran memori.

Terangkan konsep pemuatan malas. Terangkan konsep pemuatan malas. Mar 13, 2025 pm 07:47 PM

Lazy memuatkan kelewatan memuatkan kandungan sehingga diperlukan, meningkatkan prestasi web dan pengalaman pengguna dengan mengurangkan masa beban awal dan beban pelayan.

Bagaimanakah algoritma Rekonsiliasi React berfungsi? Bagaimanakah algoritma Rekonsiliasi React berfungsi? Mar 18, 2025 pm 01:58 PM

Artikel ini menerangkan algoritma perdamaian React, yang dengan cekap mengemas kini DOM dengan membandingkan pokok DOM maya. Ia membincangkan manfaat prestasi, teknik pengoptimuman, dan kesan terhadap pengalaman pengguna. Kira -kira: 159

Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya? Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya? Mar 18, 2025 pm 01:45 PM

Artikel ini membincangkan kari dalam JavaScript, teknik yang mengubah fungsi multi-argumen ke dalam urutan fungsi argumen tunggal. Ia meneroka pelaksanaan kari, faedah seperti aplikasi separa, dan kegunaan praktikal, meningkatkan kod baca

Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula? Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula? Mar 18, 2025 pm 01:44 PM

Fungsi pesanan yang lebih tinggi dalam JavaScript meningkatkan ketabahan kod, kebolehgunaan semula, modulariti, dan prestasi melalui abstraksi, corak umum, dan teknik pengoptimuman.

Apakah useContext? Bagaimana anda menggunakannya untuk berkongsi keadaan antara komponen? Apakah useContext? Bagaimana anda menggunakannya untuk berkongsi keadaan antara komponen? Mar 19, 2025 pm 03:59 PM

Artikel ini menerangkan USEContext dalam React, yang memudahkan pengurusan negara dengan mengelakkan penggerudian prop. Ia membincangkan faedah seperti keadaan terpusat dan penambahbaikan prestasi melalui pengurangan semula yang dikurangkan.

Bagaimana anda menyambungkan komponen React ke kedai Redux menggunakan Connect ()? Bagaimana anda menyambungkan komponen React ke kedai Redux menggunakan Connect ()? Mar 21, 2025 pm 06:23 PM

Artikel membincangkan penyambungan komponen reaksi ke kedai redux menggunakan Connect (), menerangkan MapStateToprops, MapdispatchToprops, dan kesan prestasi.

Bagaimana anda mengelakkan tingkah laku lalai di pengendali acara? Bagaimana anda mengelakkan tingkah laku lalai di pengendali acara? Mar 19, 2025 pm 04:10 PM

Artikel membincangkan menghalang tingkah laku lalai dalam pengendali acara menggunakan kaedah pencegahanDefault (), faedahnya seperti pengalaman pengguna yang dipertingkatkan, dan isu -isu yang berpotensi seperti kebimbangan aksesibiliti.

See all articles