Rumah > hujung hadapan web > tutorial js > 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
Lepaskan: 2024-11-03 01:48:29
asal
304 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan