Rumah > hujung hadapan web > tutorial js > Mengapakah `.then(berjaya, gagal)` Dianggap sebagai Anti-corak dalam Pengendalian Janji?

Mengapakah `.then(berjaya, gagal)` Dianggap sebagai Anti-corak dalam Pengendalian Janji?

Barbara Streisand
Lepaskan: 2024-12-25 18:42:14
asal
884 orang telah melayarinya

Why is `.then(success, fail)` Considered an Anti-pattern in Promise Handling?

Kelemahan Menggunakan .then(berjaya, gagal) untuk Pengendalian Janji

Soalan:

Dalam dokumentasi Bluebird Promise, .then(berjaya, gagal) dilabelkan sebagai antipattern. Apakah sebab di sebalik ini?

Jawapan:

Berbeza dengan rantaian .then(success).catch(fail) yang disyorkan, menggunakan .then(success, fail) menimbulkan isu aliran kawalan:

  • Jika terdapat ralat dalam panggilan balik kejayaan, ia disebarkan ke .catch() seterusnya pengendali, dengan berkesan melangkau panggilan balik gagal.

Perbandingan Aliran Kawalan:

Menggunakan .then(berjaya, gagal):

try {
    results = some_call();
} catch (e) {
    logger.log(e);
    break then;
} else
    logger.log(results);
Salin selepas log masuk

Menggunakan .then(success).catch(fail):

try {
    var results = some_call();
    logger.log(results);
} catch (e) {
    logger.log(e);
}
Salin selepas log masuk

Rasional:

Anticorak tidak digalakkan kerana ia mengehadkan pengendalian ralat kepada satu pengendali tangkapan terakhir. Walau bagaimanapun, ia boleh berguna dalam senario di mana:

  • Anda mahu mengendalikan ralat dalam langkah panggil balik tertentu.
  • Anda memerlukan pengendalian yang berbeza untuk kes ralat dan bukan ralat (mencabangkan aliran kawalan).

Pemurnian:

Untuk mengelakkan panggilan balik berulang, anda boleh menggunakan corak berikut:

some_promise_call()
   .catch(function(e) {
       return e; // it's OK, we'll just log it
   })
   .done(function(res) {
       logger.log(res);
   });
Salin selepas log masuk

Sebagai alternatif, anda boleh memanfaatkan kaedah .finally() untuk tujuan ini.

Atas ialah kandungan terperinci Mengapakah `.then(berjaya, gagal)` Dianggap sebagai Anti-corak dalam Pengendalian Janji?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan