Bagaimana untuk Menukar Panggilan Balik Pemuatan Imej kepada Janji Menggunakan async/menunggu?

Barbara Streisand
Lepaskan: 2024-11-03 15:48:03
asal
1017 orang telah melayarinya

How to Convert Image Loading Callbacks to Promises Using async/await?

Menukar Panggilan Balik kepada Janji Menggunakan async/menunggu

Panggil balik menyediakan cara yang mudah untuk mengendalikan kod tak segerak. Walau bagaimanapun, menggunakan janji dengan async/menunggu boleh menawarkan kelebihan dari segi kebolehbacaan dan kebolehselenggaraan kod. Soalan ini menangani cabaran untuk menukar fungsi panggil balik yang memuatkan lebar dan ketinggian imej ke dalam pelaksanaan berasaskan janji.

Isu dan Penyelesaian

Fungsi panggil balik yang disediakan, getImageData, mengembalikan lebar semula jadi dan ketinggian imej apabila ia selesai dimuatkan. Walau bagaimanapun, apabila dipanggil secara tidak segerak seperti yang ditunjukkan dalam contoh:

ready () {
  console.log(getImageData(this.url))
}
Salin selepas log masuk

Nilai yang dikembalikan tidak ditentukan kerana panggilan balik dilaksanakan serta-merta, sementara imej mengambil sedikit masa untuk dimuatkan. Untuk mengatasinya, kita boleh menggunakan pembina Promise untuk mencipta janji yang diselesaikan sebaik sahaja imej dimuatkan. Berikut ialah fungsi getImageData yang dikemas kini sebagai janji:

function getImageData(url) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.addEventListener('load', () => {
      resolve({ width: img.naturalWidth, height: img.naturalHeight });
    });
    img.addEventListener('error', reject); // Handle errors here
    img.src = url;
  });
}
Salin selepas log masuk

Dengan fungsi berasaskan janji ini, kita kini boleh menggunakan async/menunggu untuk menangguhkan pelaksanaan getImageData dan mendapatkan lebar dan ketinggian sebenar imej yang dimuatkan:

async function ready() {
  const imageData = await getImageData(this.url);
  console.log(imageData);
}
Salin selepas log masuk

Kod ini memastikan pengelogan konsol berlaku hanya selepas imej dimuatkan sepenuhnya dan lebar serta tingginya tersedia.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Panggilan Balik Pemuatan Imej kepada Janji Menggunakan async/menunggu?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan