Rumah >hujung hadapan web >tutorial js >Bilakah Menggunakan `.then(berjaya, gagal)` merupakan Antipattern untuk Janji?
Soalan Lazim Janji Bluebird mencadangkan bahawa menggunakan .then(berjaya, gagal) ialah anticorak. Ini kerana panggilan .then() mengembalikan janji yang akan ditolak jika panggilan balik menimbulkan ralat. Akibatnya, apabila pelog kejayaan panggil balik gagal, ralat dihantar ke panggilan balik .catch() berikut tetapi bukan kepada panggilan balik gagal yang disediakan bersama panggilan balik kejayaan.
Alir Kawalan Diagram:
[Imej rajah aliran kawalan untuk kemudian dengan dua hujah dan kemudian tangkap rantai]
Setara Segerak:
// some_promise_call().then(logger.log, logger.log) then: { try { var results = some_call(); } catch(e) { logger.log(e); break then; } // else logger.log(results); } // some_promise_call().then(logger.log).catch(logger.log) try { var results = some_call(); logger.log(results); } catch(e) { logger.log(e); }
Rasional Corak:
Biasanya, ralat terperangkap dalam setiap langkah pemprosesan, dan pengendalian ralat dipusatkan supaya semua ralat dikendalikan oleh pengendali akhir tunggal. Walau bagaimanapun, corak yang disebut dalam antipattern berguna apabila:
Corak ini boleh memperkenalkan percabangan dalam kawalan aliran.
Corak Disyorkan:
Daripada mengulangi panggilan balik, pertimbangkan untuk menggunakan .catch() dan .done():
some_promise_call() .catch(function(e) { return e; // it's OK, we'll just log it }) .done(function(res) { logger.log(res); });
Anda juga boleh mempertimbangkan untuk menggunakan .finally().
Atas ialah kandungan terperinci Bilakah Menggunakan `.then(berjaya, gagal)` merupakan Antipattern untuk Janji?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!