Rumah > hujung hadapan web > tutorial js > Mengapa Janji Berantai Kadang-kadang Abaikan Penolakan?

Mengapa Janji Berantai Kadang-kadang Abaikan Penolakan?

Barbara Streisand
Lepaskan: 2024-12-12 15:56:10
asal
434 orang telah melayarinya

Why Do Chained Promises Sometimes Ignore Rejections?

Janji Berantai Tidak Diterima Pada Penolakan

Walaupun niatnya bergantung pada janji sebelumnya, janji berantai mungkin gagal menyebarkan kesilapan. Tingkah laku ini boleh membingungkan, tetapi berakar umbi dalam sifat Janji/A.

Salah Tanggapan: Ketergantungan Rantaian

Salah tanggapan adalah bahawa masing-masing kemudiannya membayangkan pergantungan pada yang sebelumnya resolusi janji berjaya. Walau bagaimanapun, ini tidak berlaku.

Janji Janji

Dalam promise chaining, hasil fungsi panggil balik dalam a kemudian menjadi resolusi janji berikutnya. Oleh itu:

  • Jika panggilan balik mengembalikan janji, janji baharu diasimilasikan ke dalam rantaian.
  • Jika panggilan balik tidak memulangkan janji atau kembali tidak ditentukan, nilainya diluluskan terus kepada panggilan balik janji seterusnya.

Pengendalian Penolakan

Ralat yang dilemparkan atau ditolak janji dalam panggilan balik kemudian mencetuskan tangkapan janji atau panggilan balik ralat seterusnya. Walau bagaimanapun, jika ralat dikendalikan dalam panggilan balik, rantaian diteruskan seolah-olah janji telah berjaya diselesaikan.

Contoh:

Pertimbangkan kod berikut:

let promise1 = Promise.resolve(42);
let promise2 = promise1.then(
  (value) => value * 2,
  (err) => {
    console.error('Error in promise1:', err);
    // Handle the error (e.g., return a new promise)
  }
);
promise2.then((value) => console.log('Value from promise2:', value));
Salin selepas log masuk

Dalam contoh ini, jika promise1 ditolak, pengendali ralatnya mencatat ralat dan kemudian mengembalikan nilai lalai. Ini membolehkan promise2 meneruskan seolah-olah ia telah menerima respons yang berjaya daripada promise1.

Aplikasi untuk Kemas Kini Pangkalan Data

Dalam contoh kemas kini pangkalan data anda, ralat dalam db.query akan dikendalikan dalam panggilan baliknya dan nilai lalai akan diberikan. Ini membolehkan panggilan balik seterusnya diteruskan dan masih melaksanakan kemas kini pangkalan data, walaupun db.query gagal.

Amalan Terbaik

Untuk memastikan pengendalian ralat yang konsisten, pertimbangkan mengikuti amalan terbaik:

  • Gunakan pengendalian ralat eksplisit dengan tangkapan atau tangkap cuba untuk mengendalikan penolakan secara konsisten.
  • Baling semula atau kembalikan janji yang ditolak daripada pengendali ralat untuk mengelakkan ralat disebarkan ke dalam rantaian dan memastikan pengendalian yang betul.
  • Gunakan Promise.all() untuk mengagregatkan ralat daripada berbilang janji dan mengendalikan mereka di satu tempat.

Atas ialah kandungan terperinci Mengapa Janji Berantai Kadang-kadang Abaikan Penolakan?. 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