Perbezaan Tunggu: pulangan menanti janji vs pulangan janji
Apabila menggunakan fungsi tak segerak, terdapat dua variasi yang biasa digunakan: pulangan menunggu janji dan pulangan janji. Walaupun ini mungkin kelihatan serupa pada pandangan pertama, terdapat perbezaan halus yang boleh menjejaskan tingkah laku.
Resolusi Segera lwn Menunggu Resolusi
Perbezaan utama terletak pada masa janji resolusi. Sebagai balasan tunggu janji, fungsi async menunggu janji diselesaikan sebelum mengembalikan nilainya. Ini bermakna nilai yang dikembalikan oleh fungsi ialah nilai janji yang telah diselesaikan.
Sebaliknya, janji pulangan mengembalikan objek janji itu sendiri tanpa menunggu penyelesaiannya. Ini membolehkan pemanggil mengendalikan resolusi janji di luar fungsi async.
Ralat Pengendalian Dalam Fungsi Async
Apabila menggunakan pemulangan menunggu janji, sebarang ralat yang dilemparkan oleh janji akan ditangkap dalam fungsi async dan gelembung ke pemanggil. Ini menyediakan cara untuk mengendalikan ralat dalam fungsi yang sama yang memulakan operasi tak segerak.
Sebaliknya, apabila menggunakan janji pulangan, ralat yang dilemparkan oleh janji tidak akan ditangkap dalam fungsi tak segerak dan akan disebarkan ke pemanggil. Ini memerlukan pemanggil untuk mengendalikan ralat secara luaran.
Pertimbangan Prestasi
Walaupun kedua-dua kaedah mempunyai tingkah laku yang boleh diperhatikan yang sama, penggunaan menunggu pulangan mungkin mempunyai ingatan yang lebih tinggi sedikit jejak kaki. Ini kerana objek Promise perantaraan mungkin dibuat apabila menggunakan return await, yang boleh menggunakan memori tambahan.
Nested Try-Catch Blocks
Perbezaan paling ketara antara dua variasi berlaku apabila penyata menunggu pemulangan atau pemulangan bersarang dalam blok cuba-tangkap. Dalam kes ini, tunggu pulangan memastikan bahawa fungsi async menunggu janji diselesaikan sebelum blok tangkapan dilaksanakan. Ini bermakna blok tangkapan hanya akan dilaksanakan jika ralat berlaku selepas janji diselesaikan.
Sebaliknya, dengan pulangan (tanpa menunggu), janji dikembalikan serta-merta tanpa menunggu penyelesaiannya. Oleh itu, jika ralat berlaku sebelum janji diselesaikan, blok tangkapan akan dilaksanakan.
Kesimpulan
Sementara pulangan menunggu janji dan janji pulangkan secara amnya mempunyai tingkah laku yang boleh diperhatikan, pilihan antara kedua-duanya bergantung pada kes penggunaan khusus dan keperluan pengendalian ralat. Untuk pengendalian ralat dalam fungsi async, return await promise lebih diutamakan. Jika pemanggil perlu mengendalikan resolusi janji secara luaran atau untuk pertimbangan prestasi, janji kembali mungkin lebih sesuai.
Atas ialah kandungan terperinci Perbezaan Yang Ditunggu: Bilakah Anda Harus `kembali menanti janji` vs `kembali janji`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!