Rumah >hujung hadapan web >tutorial js >Mengapakah `fetch().then().json()` Kadangkala Memulangkan Janji dan Kadangkala Tidak?
Mengapa .json() Memulangkan Janji, tetapi Tidak Apabila Ia Melewati .then()?
Soalan:
Semasa menggunakan API Ambil, diperhatikan bahawa kaedah .json() mengembalikan Objek janji apabila digunakan dalam objek literal dalam pengendali .then(). Walau bagaimanapun, apabila digunakan tanpa literal objek, ia mengembalikan nilai secara langsung.
Jawapan:
Mengenai Janji:
.json() mengembalikan Promise kerana respons HTTP diterima apabila pengepala tersedia, tetapi badan (dalam kes ini, JSON) tidak belum dimuatkan. .json() mendapatkan semula janji kedua untuk badan, yang mesti dimuatkan secara berasingan.
Mengenai .then() Kelakuan:
Apabila Janji dikembalikan daripada a .then() panggil balik, ia diterima pakai oleh rantaian luar. Ini bermakna bahawa .then() luar akan menerima nilai Janji dalaman yang dipenuhi. Dalam contoh yang diberikan, outer .then() menerima objek dengan data dan sifat status, dengan berkesan menjadikan sifat data tersedia terus dalam .then().
Penyelesaian Alternatif:
Untuk mengakses kedua-dua status dan data JSON secara langsung dalam satu pengendali .then(), anda boleh menggunakan yang berikut teknik:
fetch(url) .then(response => response.json()) .then(data => { console.log(response.status, data.title); });
const response = await fetch(url); const data = await response.json(); console.log(response.status, data.title);
Ingat untuk mengesahkan status respons sebelum membaca kandungan, kerana ia mungkin tidak selalu mengandungi JSON data.
Atas ialah kandungan terperinci Mengapakah `fetch().then().json()` Kadangkala Memulangkan Janji dan Kadangkala Tidak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!