Pelaksanaan Tak Segerak di Peringkat Atas: Memahami Penggunaan tak segerak/menunggu
Walaupun tanggapan salah bahawa async/menunggu memudahkan pelaksanaan segerak tugasan tak segerak, terdapat pertimbangan bernuansa apabila cuba menggunakannya di bahagian atas level.
Sebab utama contoh yang diberikan tidak berkelakuan seperti yang diharapkan adalah kerana fungsi async sentiasa mengembalikan janji. Apabila main() dilaksanakan, ia mengembalikan janji, bukan hasil daripada dalam fungsi async. Ini membawa kepada rangkaian peristiwa di mana output konsol di luar fungsi mencetak sebelum mesej dalam, membuatkan anda tertanya-tanya mengapa tugasan dalam nampaknya dilaksanakan secara tidak segerak.
Pilihan untuk Async/Await Peringkat Atas:
Untuk menangani perkara ini, terdapat beberapa pendekatan yang anda boleh pakai:
1. Menunggu Tahap Atas dalam Modul:
Ciri ini, disokong oleh pelayar standard dan moden ES2022, membolehkan anda menggunakan await secara langsung dalam modul. Apabila menggunakan menunggu peringkat atas, pemuatan modul digantung sehingga janji yang ditunggu diselesaikan. Jika janji ditolak, beban modul gagal.
2. Fungsi Async Peringkat Atas yang Tidak Pernah Menolak:
Pilihan lain ialah untuk menentukan fungsi async peringkat atas yang tidak pernah menolak (melainkan anda mahu mengendalikan ralat "penolakan tidak dikendalikan"). Fungsi ini boleh membungkus panggilan ke main() dan mengendalikan sebarang ralat yang mungkin berlaku secara dalaman.
3. then and catch:
Anda boleh menggunakan kaedah then and catch pada janji yang dikembalikan oleh main() untuk mengendalikan hasil dan kemungkinan ralatnya, masing-masing. Pendekatan ini membolehkan anda mendaftarkan panggilan balik yang akan dilaksanakan apabila janji itu diselesaikan, memastikan nilai main() boleh dilog atau dikendalikan seperti yang dikehendaki.
Kesimpulan:
Menggunakan async/menunggu di peringkat atas memerlukan pertimbangan dan pemahaman yang teliti tentang tingkah laku yang dijangkakan. Dengan menggunakan teknik yang digariskan di atas, anda boleh menggunakan tak segerak/menunggu dengan berkesan untuk mencapai pelaksanaan tak segerak sambil memastikan pengendalian ralat yang betul dan mendapatkan semula hasil daripada tugas tak segerak.
Atas ialah kandungan terperinci Mengapa `async/menunggu` Peringkat Atas Tidak Berkelakuan Seperti Yang Dijangkakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!