Rumah >hujung hadapan web >tutorial js >Cara Menangani Ralat dalam Promise.all dengan Anggun: Panduan Praktikal
Mengendalikan Ralat dalam Promise.all: Pendekatan Praktikal
Promise.all ialah alat yang berkuasa untuk menggabungkan berbilang tugas tak segerak. Walau bagaimanapun, ia mengendalikan ralat secara berbeza daripada janji individu, sering membawa kepada kekeliruan. Artikel ini mengupas lebih mendalam tentang tingkah laku Promise.all dan membentangkan penyelesaian praktikal untuk menangani ralat dengan berkesan.
Promise.all vs. Individual Promise
Promise.all take pelbagai janji dan mengembalikan janji yang diselesaikan sebaik sahaja semua janji input selesai. Tidak seperti janji individu, Promise.all menyelesaikan dengan pelbagai nilai atau menolak dengan satu ralat. Ini bermakna jika mana-mana satu daripada janji input yang ditolak, Promise.all akan menolak serta-merta dengan kesilapan itu, tanpa mengira status janji yang tinggal.
Menangkap Ralat Janji Individu
Untuk menangkap ralat dalam janji individu dalam Promise.all, adalah menarik untuk menggunakan .catch pada setiap janji. Walau bagaimanapun, pendekatan ini tidak berkesan kerana Promise.all masih akan menolak dengan ralat pertama yang ditemui, membuang ralat daripada janji-janji lain.
Sebaliknya, penyelesaian yang lebih mantap ialah menggunakan .catch on the Promise.all memanggil dirinya sendiri. Dengan mengendalikan ralat pada tahap ini, anda boleh mengakses tatasusunan yang mengandungi gabungan nilai daripada janji yang diselesaikan dan objek ralat daripada janji yang ditolak.
Di bawah ialah contoh pelaksanaan pendekatan ini:
const arrayOfPromises = state.routes.map(route => route.handler.promiseHandler()); Promise.all(arrayOfPromises) .then(arrayResolved => { // Handle array of resolved promises and errors here... }) .catch(err => { console.error(err); // Log the composite error });
Pengendalian Janji Tersuai
Jika gelagat lalai Promise.all tidak sesuai untuk aplikasi anda, anda boleh mempertimbangkan untuk melaksanakan penyelesaian pengendalian janji tersuai. Satu pendekatan yang popular ialah mencipta fungsi Promise.when yang menyelesaikan hanya selepas semua janji telah diselesaikan atau ditolak. Walau bagaimanapun, pendekatan ini bukan sebahagian daripada spesifikasi ES6 pada masa ini.
Kesimpulan
Mengendalikan ralat dalam Promise.semuanya memerlukan pemahaman yang bernuansa tentang kelakuannya. Dengan memanfaatkan .catch pada panggilan Promise.all, anda boleh menangkap ralat daripada janji individu sambil mengekalkan nilai yang diselesaikan. Pendekatan ini memberikan lebih fleksibiliti dan kawalan ke atas resolusi janji, membolehkan anda mengendalikan tugas tak segerak dengan berkesan.
Atas ialah kandungan terperinci Cara Menangani Ralat dalam Promise.all dengan Anggun: Panduan Praktikal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!