Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah anda boleh menukar fungsi berasaskan panggilan balik kepada yang berasaskan janji menggunakan async/menunggu dalam JavaScript?

Bagaimanakah anda boleh menukar fungsi berasaskan panggilan balik kepada yang berasaskan janji menggunakan async/menunggu dalam JavaScript?

DDD
DDDasal
2024-11-03 01:48:29252semak imbas

How can you convert a callback-based function to a promise-based one using async/await in JavaScript?

Menukar Panggilan Balik kepada Janji Menggunakan Async/Await

Dalam JavaScript, panggil balik ialah pendekatan biasa untuk mengendalikan operasi tak segerak. Walau bagaimanapun, menggunakan panggilan balik boleh membawa kepada kod yang sukar dibaca dan diselenggara. Async/await ialah ciri baharu yang menyediakan cara yang lebih mudah untuk berfungsi dengan kod tak segerak.

Salah satu faedah utama async/wait ialah keupayaan untuk menjeda pelaksanaan fungsi sehingga janji diselesaikan. Ini membolehkan anda menulis kod yang lebih mudah dibaca dan diselenggara, terutamanya apabila berurusan dengan berbilang operasi tak segerak.

Pernyataan Masalah

Pertimbangkan fungsi berikut yang mendapatkan semula dimensi imej daripada URL yang diberikan menggunakan panggilan balik:

<code class="javascript">function getImageData(url) {
  const img = new Image();
  img.addEventListener('load', function () {
    return { width: this.naturalWidth, height: this.naturalHeight };
  });
  img.src = url;
}</code>

Walau bagaimanapun, kod ini boleh menjadi masalah jika anda perlu mendapatkan semula data imej dengan segera. Jika anda memanggil fungsi getImageData seperti ini:

<code class="javascript">ready() {
  console.log(getImageData(this.url));
}</code>

Anda akan menjadi tidak ditentukan kerana imej belum lagi dimuatkan pada masa panggilan balik dilaksanakan.

Menggunakan Async/ Tunggu

Untuk menyelesaikan masalah ini, anda boleh menggunakan async/await untuk menukar fungsi getImageData kepada janji. Begini cara anda melakukannya:

<code class="javascript">function loadImage(url) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.addEventListener('load', () => resolve(img));
    img.addEventListener('error', reject); // Handle errors gracefully
    img.src = url;
  });
}

async function getImageData(url) {
  const img = await loadImage(url);
  return { width: img.naturalWidth, height: img.naturalHeight };
}

async function ready() {
  console.log(await getImageData(this.url));
}</code>

Dalam kod yang ditulis semula ini, kami mula-mula mencipta fungsi loadImage yang mengembalikan janji. Janji ini diselesaikan apabila imej telah selesai dimuatkan atau menolak jika terdapat ralat.

Seterusnya, kami mencipta fungsi getImageData yang menggunakan async/menunggu untuk menunggu janji dikembalikan oleh loadImage untuk diselesaikan sebelum mengembalikan dimensi imej.

Akhir sekali, kita boleh memanggil fungsi getImageData daripada fungsi sedia menggunakan async/await. Ini memastikan bahawa fungsi sedia hanya merekodkan dimensi imej selepas imej telah dimuatkan.

Dengan menggunakan async/wait, anda boleh memudahkan kod yang melibatkan operasi tak segerak dan menjadikannya lebih mudah dibaca dan diselenggara.

Atas ialah kandungan terperinci Bagaimanakah anda boleh menukar fungsi berasaskan panggilan balik kepada yang berasaskan janji menggunakan async/menunggu dalam JavaScript?. 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