Rumah >hujung hadapan web >tutorial js >Mengapakah `.then(success, fail)` merupakan Antipattern dalam Janji JavaScript?
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: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!