Rumah >hujung hadapan web >tutorial js >Apakah Perbezaan Antara `return await Promise` dan `return Promise` dalam JavaScript Asynchronous?

Apakah Perbezaan Antara `return await Promise` dan `return Promise` dalam JavaScript Asynchronous?

Patricia Arquette
Patricia Arquetteasal
2024-11-28 06:20:15557semak imbas

What's the Difference Between `return await Promise` and `return Promise` in Asynchronous JavaScript?

Memahami Perbezaan antara pulangan menunggu janji dan pulangan janji

Dalam JavaScript tak segerak, tingkah laku pulangan menunggu janji dan janji pulangan selalunya subjek perbahasan. Walaupun kedua-dua ungkapan melibatkan pemulangan janji, perbezaan halus boleh timbul dalam senario tertentu.

Fungsi Asynchronous

Dalam sampel kod yang disediakan, dua fungsi tak segerak (delay1Second) ditakrifkan. Fungsi pertama menggunakan return await untuk membalut hasil janji kelewatan dalam janji lain, manakala fungsi kedua hanya mengembalikan janji kelewatan tanpa menunggunya.

Tingkah Laku Yang Boleh Diperhatikan

Dalam kebanyakan kes, tiada perbezaan yang ketara antara kedua-dua binaan ini. Kedua-dua fungsi delay1Second mengembalikan janji yang diselesaikan selepas 1 saat. Walau bagaimanapun, seperti yang dinyatakan dalam soalan, versi menunggu pemulangan mungkin menggunakan lebih sedikit memori disebabkan penciptaan objek janji perantaraan.

Pengendalian Pengecualian

Walau bagaimanapun, a perbezaan kritikal muncul apabila ungkapan ini digunakan dalam blok cuba-tangkap. Pertimbangkan contoh berikut:

async function rejectionWithReturnAwait() {
  try {
    return await Promise.reject(new Error());
  } catch (e) {
    return 'Saved!';
  }
}

async function rejectionWithReturn() {
  try {
    return Promise.reject(new Error());
  } catch (e) {
    return 'Saved!';
  }
}

Dalam fungsi pertama (rejectionWithReturnAwait), pulangan dibalut dengan tunggu. Ini bermakna bahawa fungsi akan menunggu janji yang ditolak untuk ditolak, yang akan menyebabkan pengecualian dilemparkan dalam blok async. Akibatnya, pengendali tangkapan dicapai, dan fungsi mengembalikan janji yang diselesaikan kepada 'Disimpan!'.

Sebaliknya, dalam fungsi kedua (rejectionWithReturn), janji dikembalikan terus tanpa menunggu dalam async fungsi. Ini bermakna pengecualian tidak berlaku dalam blok async, dan pengendali tangkapan tidak dilaksanakan. Sebaliknya, pemanggil hanya menerima janji yang ditolak.

Atas ialah kandungan terperinci Apakah Perbezaan Antara `return await Promise` dan `return Promise` dalam JavaScript Asynchronous?. 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