Lakukan dan Lupakan Janji dalam Node.js (ES7)
Dalam pengaturcaraan tak segerak, adalah perkara biasa untuk menghentikan tugas tanpa menunggu keputusannya . Bolehkah anda melakukan ini dengan janji dalam Node.js (ES7)?
Soalan:
Pertimbangkan coretan kod berikut:
redisClientAsync.delAsync('key'); return await someOtherAsyncFunction();
Boleh anda membungkus baris pertama dalam fungsi async tanpa menunggunya? Apakah yang berlaku jika anda melakukannya?
Jawapan:
Ya, anda boleh menjalankan dua fungsi tak segerak secara selari tanpa menunggu panggilan delAsync. Dengan mencipta dan membuang janji, anda secara berkesan "menembak dan melupakannya".
Mengapa ini tidak sesuai?
Pendekatan ini mempunyai kelemahan yang ketara. Jika janji delAsync ditolak, anda tidak akan dimaklumkan. Ini boleh menyebabkan ralat penolakan yang tidak dikendalikan dan kemungkinan ranap sistem.
Pendekatan Alternatif:
Jalankan fungsi secara selari: Untuk melaksanakan tugas delAsync dan someOtherAsyncFunction secara serentak, anda boleh menggunakan Promise.all():
var [_, res] = await Promise.all([ someAsyncFunction(), // result is ignored, exceptions aren't someOtherAsyncFunction() ]); return res;
Dalam kes ini, hasil delAsync diabaikan, tetapi pengecualian masih dibuang.
Kesimpulan:
Walaupun "api dan lupa" boleh menjadi mudah, adalah penting untuk mempertimbangkan kemungkinan akibatnya. Dengan mentakrifkan keperluan anda dengan jelas (menunggu, pengendalian keputusan dan penangkapan pengecualian), anda boleh memastikan pengendalian tugas tak segerak yang sesuai dalam aplikasi Node.js anda.
Atas ialah kandungan terperinci Bolehkah Node.js (ES7) Janji Melaksanakan \'Fire and Forget\' Asynchronous, dan Apakah Risikonya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!