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
777 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!

sumber:php.cn
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