Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Menolak Janji Ambil Secara Manual Berdasarkan Kod Status HTTP?
Ambil: Mengawal Penolakan Janji Berdasarkan Kod Status HTTP
Dalam bidang pengambilan, janji biasanya hanya ditolak apabila menghadapi ralat rangkaian. Walau bagaimanapun, dalam senario di mana kod status HTTP 4xx atau 5xx dikembalikan, janji itu tidak ditolak secara lalai.
Masalah:
Dalam kod yang anda berikan, anda cuba untuk memintas dan menolak janji apabila status respons HTTP menunjukkan ralat. Walau bagaimanapun, janji itu tidak ditolak seperti yang diharapkan.
Sebab:
Ambil janji hanya ditolak dengan TypeError apabila ralat rangkaian berlaku. Memandangkan respons 4xx dan 5xx bukan ralat rangkaian, tiada apa yang perlu ditangkap. Untuk menolak janji secara manual, anda perlu membuat ralat sendiri.
Penyelesaian:
Untuk menyelesaikan isu ini dan menolak janji berdasarkan status HTTP, anda boleh mengubah suai anda kod seperti berikut:
import 'whatwg-fetch'; function fetchVehicle(id) { return dispatch => { return dispatch({ type: 'FETCH_VEHICLE', payload: fetch(`http://swapi.co/api/vehicles/${id}/`) .then(res => { if (!res.ok) { const error = new Error('HTTP Error: ' + res.status); throw error; // Throwing the error here will cause fetch to reject the promise } return res; }) .then(res => res.json()) .catch(error => { throw error; }) }); }; }
Dengan memperkenalkan logik pengendalian ralat dalam janji pengambilan, anda kini boleh menolak janji secara manual jika respons HTTP status menunjukkan keadaan tidak berjaya. Ini membolehkan anda menangkap dan mengendalikan ralat dengan sewajarnya dalam blok tangkapan perisian tengah redux anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menolak Janji Ambil Secara Manual Berdasarkan Kod Status HTTP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!