Menunggu lwn. Membalas Janji: Persefahaman menanti lwn janji Membalas
Pengenalan:
Dalam JavaScript, pengendalian tugas tak segerak boleh dicapai menggunakan janji. Apabila berurusan dengan janji dalam fungsi async, dilema biasa timbul: patutkah anda menggunakan return await promise atau hanya pulangkan janji? Artikel ini meneroka perbezaan antara kedua-dua pendekatan ini, menyerlahkan nuansa tingkah laku dan implikasi pengendalian ralat.
Tingkah Laku dan Prestasi:
Secara amnya, tiada perbezaan yang ketara dalam tingkah laku yang boleh diperhatikan antara menggunakan janji pulangan menunggu dan janji pulangan. Kedua-dua pendekatan menghasilkan hasil janji yang sama dan mempunyai variasi prestasi yang boleh diabaikan. Walau bagaimanapun, pelaksanaan mungkin sedikit memihak kepada versi menunggu pemulangan kerana potensi penciptaan objek Perantaraan Janji.
Pengendalian Ralat:
Perbezaan utama muncul apabila pemulangan atau menunggu pulangan digunakan dalam blok cuba-tangkap. Mari kita pertimbangkan coretan kod:
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 rejectionWithReturnAwait, fungsi async menunggu janji yang ditolak sebelum mengembalikan hasilnya. Ini mencetuskan pengecualian, yang ditangkap oleh klausa tangkapan, membawa fungsi untuk mengembalikan janji yang diselesaikan kepada "Disimpan!".
Sebaliknya, rejectionWithReturn mengembalikan janji yang ditolak terus tanpa menunggunya dalam fungsi async . Akibatnya, kes tangkapan tidak digunakan, dan penolakan janji disebarkan kepada pemanggil.
Kesimpulan:
Dalam kebanyakan kes, kedua-dua pemulangan menunggu janji dan membalas janji menghasilkan tingkah laku yang sama. Walau bagaimanapun, apabila pengendalian ralat terlibat dalam blok try-catch, janji return await memastikan janji ditunggu dan pengecualian ditangkap oleh fungsi lampiran, manakala janji pulangan secara langsung mengembalikan janji tanpa pengendalian ralat dalam fungsi.
Atas ialah kandungan terperinci Menunggu vs. Janji Pulangan: Mana Yang Harus Anda Gunakan dalam Pengendalian Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!