Rumah >hujung hadapan web >tutorial js >Mengapakah `response.json()` Mengembalikan Janji dalam Ambil dan Bagaimana Saya Boleh Mengakses Hasilnya?

Mengapakah `response.json()` Mengembalikan Janji dalam Ambil dan Bagaimana Saya Boleh Mengakses Hasilnya?

DDD
DDDasal
2024-12-15 17:24:13931semak imbas

Why Does `response.json()` Return a Promise in Fetch, and How Can I Access the Result?

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:

  • Mengapa response.json pulangkan janji?

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.

  • Mengapa memulangkan janji daripada .then() memberikan nilai?

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!

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