Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Memproses Semua Janji, Walaupun Yang Gagal, dalam JavaScript?
Memproses Janji Tanpa mengira Kegagalan
Apabila bekerja dengan set Janji yang melibatkan permintaan rangkaian, selalunya perlu mengendalikan senario di mana sesetengah permintaan mungkin gagal. Secara lalai, Promise.all() ditamatkan lebih awal apabila menghadapi penolakan pertama. Walau bagaimanapun, dalam situasi tertentu, anda mungkin mahu menunggu sehingga semua Janji selesai, walaupun untuk yang gagal.
Corak Disyorkan
Satu pendekatan ialah menggunakan reflect() fungsi, yang menukar Promise menjadi Promise yang diselesaikan kepada objek status dengan sama ada harta yang dipenuhi atau ditolak. Dengan memetakan Janji dalam tatasusunan anda kepada fungsi reflect(), anda boleh memastikan semua Janji lengkap, tanpa mengira statusnya.
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" })); Promise.all(arr.map(reflect)).then(results => { const success = results.filter(x => x.status === "fulfilled"); });
Dalam contoh ini, Promise.all() digunakan dengan yang diubah suai pelbagai Janji, menunggu kesemuanya dilengkapkan. Tatasusunan kejayaan akan mengandungi hasil Janji yang berjaya, membolehkan anda mengendalikan kegagalan rangkaian dengan anggun dan masih meneruskan tindakan berdasarkan data yang tersedia.
Penyelesaian yang Diperbaiki (Promise.allSettled)
Dibina dalam JavaScript moden ialah Promise.allSettled, yang menyediakan cara yang lebih ringkas dan cekap untuk mencapai yang diingini tingkah laku. Ia mengembalikan Janji yang diselesaikan kepada pelbagai keputusan, masing-masing mengandungi status yang dipenuhi atau ditolak, tanpa mengira keputusan Janji.
Promise.allSettled([promise]).then(([result]) => { // reach here regardless // { status: "fulfilled", value: 33 } });
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memproses Semua Janji, Walaupun Yang Gagal, dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!