Rumah >hujung hadapan web >tutorial js >Mengapakah `.then(success, fail)` merupakan Antipattern dalam Janji JavaScript?

Mengapakah `.then(success, fail)` merupakan Antipattern dalam Janji JavaScript?

DDD
DDDasal
2024-12-31 16:45:09172semak imbas

Why is `.then(success, fail)` an Antipattern in JavaScript Promises?

Antipattern: .then(berjaya, gagal) dalam Janji

Hujah untuk Mengelak .then(berjaya, gagal)

Soalan Lazim janji Bluebird menasihatkan agar tidak menggunakan .then(berjaya, gagal) sebagai anticorak. Walaupun blok cuba-tangkap mungkin kelihatan sama, terdapat perbezaan:

Perbezaan Aliran Kawalan:

.kemudian (berjaya, gagal) mengembalikan janji yang akan ditolak jika panggilan balik kejayaan menimbulkan ralat. Ini bermakna jika pencatat kejayaan gagal, ralat akan dihantar kepada panggilan balik .catch(), bukan panggilan balik gagal.

Rajah Aliran Kawalan:

[ Kemudian dengan dua hujah](https://i.sstatic.net/WAcpP.png)

[Then-catch rantai](https://i.sstatic.net/wX5mr.png)

Setara Segerak:

// then: { try ... catch(e) { ... } else ... }
try { var results = some_call(); } catch(e) { logger.log(e); break then; } // else logger.log(results);

Pengecualian Pengendalian:

Pencatat .catch() juga akan mengendalikan pengecualian daripada panggilan pencatat kejayaan, memberikan mekanisme pengendalian ralat yang lebih komprehensif.

Menjangkakan Kebergunaan Antipattern

Walaupun anticorak secara amnya tidak digalakkan, ia boleh berguna apabila:

    Anda mahu mengendalikan ralat khusus untuk satu langkah dalam pemprosesan.
  • Anda mahu mengambil cara yang berbeza tindakan bergantung kepada sama ada ralat telah berlaku.

Kaveat: Ambil perhatian bahawa pendekatan ini memperkenalkan percabangan ke dalam aliran kawalan.

Alternatif kepada .then (berjaya, gagal)

Untuk mengelakkan pertindihan kod, pertimbangkan untuk menggunakan .catch dan .selesai:

some_promise_call()
   .catch(function(e) {
       return e; // it's OK, we'll just log it
   })
   .done(function(res) {
       logger.log(res);
   });
Atau anda boleh memilih .finally() untuk mengendalikan kedua-dua senario kejayaan dan kegagalan.

Atas ialah kandungan terperinci Mengapakah `.then(success, fail)` merupakan Antipattern dalam Janji JavaScript?. 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