Insight to Promises and Promise Chaining in Fetch Response Handling
Semasa bereksperimen dengan fetch() API, satu pemerhatian yang menarik telah muncul mengenai tingkah laku daripada .json().
Pemerhatian:
Apabila mengembalikan respons.json() dalam objek literal dihantar ke .then(), objek Promise diperolehi. Walau bagaimanapun, apabila dikembalikan terus daripada pengendali .then(), ia mengembalikan nilai sebenar.
Penjelasan:
Panggilan respons.json mendapatkan semula janji lain untuk respons HTTP badan, yang belum dimuatkan. Ini kerana anda menerima objek tindak balas sebaik sahaja pengepala diterima, tetapi kandungannya belum tersedia.
Ini adalah aspek asas janji. Janji membenarkan keboleh rantaian tanpa bersarang dengan mendayakan pemulangan janji daripada fungsi panggil balik dan penggunaan seterusnya.
Pendekatan Alternatif:
Untuk mengakses status respons selepas menunggu JSON badan, anda boleh menggunakan pendekatan yang berbeza:
Kembali hasil perantaraan menggunakan rantaian .then() bersarang:
fetch(url) .then(response => response.json()) .then(data => ({ data: data, status: response.status })) .then(res => { console.log(res.status, res.data.title); });
Gunakan fungsi async dan tunggu:
const response = await fetch(url); const data = await response.json(); console.log(response.status, data.title);
Awas :
Adalah dinasihatkan untuk mengesahkan status respons sebelum mengakses kandungan respons, kerana ia mungkin tidak sentiasa mengandungi data JSON.
Atas ialah kandungan terperinci Mengapakah `response.json()` Mengembalikan Janji dalam Ambil dan Bagaimana Saya Boleh Mengakses Hasilnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!