Cara Menangkap Ralat dengan Fetch Promises: Mengapa Penolakan Bersyarat Tidak Berfungsi?

DDD
Lepaskan: 2024-11-13 03:36:02
asal
277 orang telah melayarinya

How to Catch Errors with Fetch Promises: Why Conditional Rejection Doesn't Work?

Menangkap Ralat dengan Mengambil Janji: Penolakan Bersyarat

Dalam aplikasi Redux, pembangun sering menggunakan fetch untuk permintaan tak segerak. Walau bagaimanapun, pengendalian ralat apabila permintaan gagal boleh menjadi mencabar, terutamanya jika permintaan itu mengembalikan kod status bukan OK.

Pertimbangkan coretan kod berikut:

function fetchVehicle(id) {
    return dispatch => {
        return dispatch({
            type: 'FETCH_VEHICLE',
            payload: fetch(`http://swapi.co/api/vehicles/${id}/`)
                .then(status)
                .then(res => res.json())
                .catch(error => {
                    throw(error);
                })
        });
    };
}

function status(res) {
    if (!res.ok) {
        return Promise.reject()
    }
    return res;
}
Salin selepas log masuk

Matlamatnya adalah untuk menolak janji dan tangkap ralat dalam pengurang jika kod status tidak OK. Walau bagaimanapun, kod tidak berfungsi seperti yang dimaksudkan: janji tidak akan ditolak.

Memahami Janji Ambil

Ambil janji hanya menolak dengan TypeError apabila ralat rangkaian berlaku . Respons dengan kod status 4xx atau 5xx tidak dianggap sebagai ralat rangkaian, jadi ralat tidak dilemparkan.

Melempar Ralat Tersuai

Untuk menangkap ralat bukan rangkaian ini, kita boleh membuang ralat secara manual jika kod status menunjukkan permintaan yang gagal:

function fetchVehicle(id) {
  return fetch(`http://swapi.co/api/vehicles/${id}/`)
    .then(response => {
      if (!response.ok) {
        throw new Error('Something went wrong');
      }
      return response.json();
    })
    .catch(error => {
      console.log(error);
    });
}
Salin selepas log masuk

Sekarang, jika permintaan itu mengembalikan kod status bukan OK, ia akan mencetuskan pengendali ralat dan log mesej ralat. Pengurang kemudiannya boleh mengendalikan ralat ini dengan sewajarnya.

Atas ialah kandungan terperinci Cara Menangkap Ralat dengan Fetch Promises: Mengapa Penolakan Bersyarat Tidak Berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan