Rumah > hujung hadapan web > tutorial js > Bilakah Menggunakan `.then(berjaya, gagal)` merupakan Antipattern untuk Janji?

Bilakah Menggunakan `.then(berjaya, gagal)` merupakan Antipattern untuk Janji?

Barbara Streisand
Lepaskan: 2024-12-25 22:15:13
asal
487 orang telah melayarinya

When is Using `.then(success, fail)` an Antipattern for Promises?

Bilakah .then(berjaya, gagal) Dianggap sebagai 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);
}
Salin selepas log masuk

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:

  • Ralat perlu dikendalikan secara khusus dalam langkah tertentu.
  • Jika tiada ralat berlaku, tindakan seterusnya berbeza dengan ketara.

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);
   });
Salin selepas log masuk

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!

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