Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengendalikan Berbilang Janji, Termasuk Yang Ditolak, dalam JavaScript?
Mengendalikan Janji dengan Resolusi Campuran
Dalam pengaturcaraan tak segerak, menangani set janji boleh menimbulkan cabaran. Pertimbangkan senario di mana anda mempunyai berbilang permintaan rangkaian dan salah satu daripadanya mungkin gagal. Secara lalai, Promise.all() menghentikan proses dengan ralat sebaik sahaja satu janji ditolak. Ini mungkin tidak diingini jika anda ingin menangkap respons daripada semua permintaan.
Pustaka Corak Tanpa Janji
Satu penyelesaian tanpa menggunakan perpustakaan promises melibatkan membungkus setiap janji dengan fungsi "mencerminkan". Fungsi ini mengembalikan janji baharu yang diselesaikan dengan nilai atau ralat daripada janji asal dan termasuk sifat "status" yang menunjukkan kejayaan atau penolakan.
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" }));
Anda kemudian boleh memetakan setiap janji kepada janji mencerminkan dan memanggil Promise.all() pada tatasusunan yang dipetakan:
var arr = [fetch('index.html'), fetch('http://does-not-exist')] Promise.all(arr.map(reflect)).then(function (results) { var success = results.filter(x => x.status === "fulfilled"); });
Pendekatan ini membolehkan anda mengendalikan kedua-dua janji yang berjaya dan ditolak dengan anggun.
Promise.allSettled() Terbina dalam
Perhatikan bahawa penyemak imbas moden dan persekitaran JavaScript kini mempunyai kaedah Promise.allSettled() asli yang menyediakan kefungsian yang serupa. Ia mengembalikan janji yang diselesaikan dengan pelbagai hasil, setiap satu mewakili status dan nilai (jika dipenuhi) janji asal yang sepadan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Berbilang Janji, Termasuk Yang Ditolak, dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!