Rumah >hujung hadapan web >tutorial js >Bagaimana Saya Boleh Menunggu Semua Janji Ditepati, Walaupun Ada yang Gagal?

Bagaimana Saya Boleh Menunggu Semua Janji Ditepati, Walaupun Ada yang Gagal?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-03 11:08:39192semak imbas

How Can I Wait for All Promises to Settle, Even if Some Fail?

Menunggu Semua Janji, Tanpa mengira Kegagalan

Dalam senario di mana anda mempunyai beberapa siri janji membuat permintaan rangkaian yang mungkin menemui kegagalan, anda mungkin lebih suka menunggu semua janji diselesaikan sebelum meneruskan, walaupun ada yang gagal.

Terbina dalam Kaedah Promise.allSettled menyediakan penyelesaian yang mudah:

Promise.allSettled([promise]).then(([result]) => {
  // Reached regardless of outcome
  // {status: "fulfilled", value: 33}
});

Sebelum pengenalan Promise.allSettled, anda boleh menggunakan fungsi reflect untuk mencapai hasil yang sama:

const reflect = (p) => p.then(
  (v) => ({ v, status: "fulfilled" }),
  (e) => ({ e, status: "rejected" })
);

reflect(promise).then((v) => {
  console.log(v.status);
});

Sebagai alternatif, melanjutkan fungsi pantulan untuk berfungsi dengan pelbagai janji:

function reflect(promises) {
  return Promise.all(promises.map((p) => {
    return p.then((v) => ({ v: v, status: "fulfilled" }),
                   (e) => ({ e: e, status: "rejected" }));
  }));
}

reflect(promises).then((results) => {
  var success = results.filter((x) => x.status === "fulfilled");
});

Oleh menggunakan teknik ini, anda boleh mengendalikan kegagalan rangkaian dengan anggun dan memastikan kod anda terus dilaksanakan seperti yang dimaksudkan, tidak kira sama ada beberapa janji berjaya atau tidak.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Menunggu Semua Janji Ditepati, Walaupun Ada yang Gagal?. 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