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
Barbara Streisandasal
2024-12-25 22:15:13483semak imbas

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);
}

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);
   });

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!

Kenyataan:
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