Bagaimanakah saya boleh menukar fungsi panggil balik kepada Janji menggunakan async/menunggu dalam JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-11-02 04:04:30
asal
538 orang telah melayarinya

How can I convert a callback function to a Promise using async/await in JavaScript?

Menukar Fungsi Panggilan Balik kepada Janji dengan tidak segerak/menunggu

Dalam JavaScript, keupayaan untuk menangguhkan pelaksanaan kod sehingga peristiwa tertentu berlaku adalah keperluan biasa. Apabila bekerja dengan kod tak segerak, panggilan balik telah menjadi pendekatan tradisional dalam JavaScript, tetapi janji menawarkan cara yang lebih ringkas dan fleksibel untuk mengendalikan operasi tak segerak. Janji memungkinkan untuk merantai dan menunggu operasi, memudahkan kod async dan meningkatkan kebolehbacaan.

Masalah

Pertimbangkan fungsi berikut yang mengambil imej daripada URL, memuatkannya dan mengembalikan lebarnya dan ketinggian:

<code class="js">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

Menggunakan fungsi ini sebagai panggilan balik, kami mungkin menghadapi masalah apabila cuba mengakses data imej dengan segera. Sebagai contoh, jika kita menggunakan fungsi seperti berikut:

<code class="js">ready() {
  console.log(getImageData(this.url));
}</code>
Salin selepas log masuk

Fungsi getImageData dilaksanakan serta-merta, tetapi imej mungkin belum selesai dimuatkan, menghasilkan output yang tidak ditentukan. Untuk mengatasi isu ini, kami boleh memanfaatkan janji dan async/menunggu untuk memastikan data imej diambil hanya selepas imej berjaya dimuatkan.

Penyelesaian

Daripada bergantung pada panggilan balik, kami boleh tukar getImageData kepada fungsi berasaskan janji:

<code class="js">function loadImage(url) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.addEventListener('load', () => resolve(img));
    img.addEventListener('error', reject); // Don't forget to handle errors
    img.src = url;
  });
}</code>
Salin selepas log masuk

Kini, kita boleh menggunakan async/menunggu untuk mendapatkan semula data imej hanya apabila ia tersedia:

<code class="js">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

Dengan menggunakan janji dan async/menunggu, kami boleh memastikan bahawa data imej boleh diakses hanya selepas imej telah dimuatkan, memberikan pendekatan yang lebih mantap dan bersih untuk mengendalikan operasi tak segerak.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar fungsi panggil balik kepada 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!