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:
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));
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:
Atas ialah kandungan terperinci Mengapa Janji Berantai Kadang-kadang Abaikan Penolakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!