Return waiting Promise vs Return Promise
Dalam JavaScript, perbezaan antara return await promise dan return promise dalam fungsi tak segerak selalunya halus. Walau bagaimanapun, terdapat senario tertentu yang menunjukkan tingkah laku yang berbeza, seperti yang diterokai di bawah:
Kelewatan dan Kebolehmerhatian:
Dalam contoh kod yang disediakan, fungsi delay1Second menggunakan kedua-dua pendekatan kembali Janji yang diselesaikan selepas kelewatan 1 saat. Kedua-dua versi kelihatan berkelakuan serupa dari segi hasil yang boleh diperhatikan.
Pengendalian Ralat:
Lazimnya, kedua-dua pendekatan tidak memberi kesan kepada pengendalian ralat dalam fungsi tak segerak atau penyebaran kesilapan kepada pemanggil. Dalam kedua-dua kes, ralat akan keluar daripada Janji fungsi.
Penggunaan Memori:
Walaupun tidak dapat diperhatikan secara langsung, versi janji yang menanti pulangan mungkin meningkatkan sedikit penggunaan memori berbanding kepada pendekatan janji pulangan. Ini kerana objek Promise tambahan mungkin dibuat dan ditunggu semasa pelaksanaan.
Cuba-Tangkap Blok:
Perbezaan yang halus tetapi penting timbul apabila menggunakan pendekatan ini semasa percubaan -menangkap blok. 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 penolakanWithReturnAwait, penolakan yang ditunggu melemparkan pengecualian, yang ditangkap dalam blok tangkapan. Akibatnya, fungsi itu memutuskan kepada "Disimpan!".
Sebaliknya, dalam rejectionWithReturn, penolakan dikembalikan terus tanpa menunggu dalam fungsi async. Ini bermakna blok tangkapan tidak dilaksanakan dan sebaliknya pemanggil menerima penolakan.
Kesimpulan:
Walaupun perbezaan antara pulangan menunggu janji dan pulangan janji biasanya diabaikan , adalah penting untuk mengetahui kemungkinan implikasi apabila menggunakan blok cuba-tangkap. Dalam kebanyakan kes, mana-mana pendekatan boleh digunakan dengan impak yang minimum. Walau bagaimanapun, untuk pengendalian ralat yang tepat dalam blok cuba-tangkap, janji tunggu pulangan harus diutamakan untuk memastikan penolakan ditangkap dan dikendalikan dengan betul dalam fungsi async.
Atas ialah kandungan terperinci Bilakah saya harus menggunakan `return await promise` berbanding `return promise` dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!