Rumah >hujung hadapan web >tutorial js >Bolehkah Node.js (ES7) Janji Melaksanakan \'Fire and Forget\' Asynchronous, dan Apakah Risikonya?

Bolehkah Node.js (ES7) Janji Melaksanakan \'Fire and Forget\' Asynchronous, dan Apakah Risikonya?

Susan Sarandon
Susan Sarandonasal
2024-11-27 13:23:18778semak imbas

Can Node.js (ES7) Promises Implement

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:

  • Tunggu janji: Jika anda ingin mengendalikan kesan sampingan atau pengecualian, anda mesti menunggu janji. Walau bagaimanapun, jika anda tidak memerlukan keputusannya, anda boleh membuangnya menggunakan void (tunggu someAsyncFunction()).
  • Tangkap pengecualian: Jika anda tidak mengambil berat tentang hasilnya tetapi mahu untuk menangkap pengecualian, anda boleh menggunakan ...someAsyncFunction().catch(function ignore() {})....
  • 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn