Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengendalikan Berbilang Janji, Termasuk Yang Ditolak, dalam JavaScript?

Bagaimanakah Saya Boleh Mengendalikan Berbilang Janji, Termasuk Yang Ditolak, dalam JavaScript?

Susan Sarandon
Susan Sarandonasal
2024-12-18 06:07:14887semak imbas

How Can I Handle Multiple Promises, Including Rejected Ones, in 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!

Kenyataan:
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