Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Menangani Kegagalan Rangkaian Dengan Anggun Apabila Menggunakan Janji dalam JavaScript?

Bagaimanakah Saya Boleh Menangani Kegagalan Rangkaian Dengan Anggun Apabila Menggunakan Janji dalam JavaScript?

Patricia Arquette
Patricia Arquetteasal
2024-12-15 17:21:16584semak imbas

How Can I Gracefully Handle Network Failures When Using Promises in JavaScript?

Mengendalikan Kegagalan Rangkaian dengan Janji Menunggu

Dalam JavaScript, Promise.all() ialah alat yang berkuasa untuk mengurus berbilang operasi tak segerak. Walau bagaimanapun, ia mungkin tidak sesuai apabila anda mahu semua janji dilengkapkan, walaupun ada yang menolak.

Untuk mengendalikan senario ini, anda boleh melaksanakan fungsi "Promise Reflect" tersuai yang menukar janji menjadi objek dengan dipenuhi atau ditolak status:

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

Menggunakan fungsi mencerminkan ini, anda boleh memetakan tatasusunan janji asal kepada tatasusunan tercermin janji:

var arr = [ fetch('index.html'), fetch('http://does-not-exist') ]
var reflectedPromises = arr.map(reflect);

Akhir sekali, anda boleh menggunakan Promise.all() untuk menunggu semua janji yang dicerminkan selesai:

Promise.all(reflectedPromises).then(results => {
    var success = results.filter(x => x.status === "fulfilled");
});

Pendekatan ini membolehkan anda mengendalikan kegagalan rangkaian dengan anggun dan meneruskan hanya selepas semua permintaan telah selesai. Anda boleh mengakses nilai dan ralat yang diselesaikan masing-masing daripada tatasusunan kejayaan dan hasil.

Sebagai alternatif, anda kini boleh menggunakan kaedah Promise.allSettled() asli:

Promise.allSettled([promise]).then(([result]) => {
    console.log(result);  // Handles both fulfilled and rejected promises
});

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangani Kegagalan Rangkaian Dengan Anggun Apabila Menggunakan Janji 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