Rumah >hujung hadapan web >tutorial js >Mengapa Adakah fetch().then().json() Kadang-kadang Memulangkan Janji dan Kadang-kadang Tidak?

Mengapa Adakah fetch().then().json() Kadang-kadang Memulangkan Janji dan Kadang-kadang Tidak?

Patricia Arquette
Patricia Arquetteasal
2024-12-29 01:00:11916semak imbas

Why Does fetch().then().json() Sometimes Return a Promise and Sometimes Not?

Memahami Pengendalian Janji dalam Fetch()

Apabila bekerja dengan API fetch() JavaScript, satu tingkah laku yang tidak dijangka mungkin timbul apabila menggunakan .json () kaedah. Artikel ini menyelidiki mengapa .json() mengembalikan janji dalam senario tertentu dan bukan pada senario lain.

Mengapa Tingkah Laku Janji Berbeza

Kaedah .json() mencetuskan Janji objek untuk mendapatkan semula badan tindak balas dan menghuraikannya sebagai JSON. Ini kerana badan respons HTTP tidak tersedia serta-merta. Oleh itu, kaedah .json() mengembalikan Promise yang diselesaikan apabila badan tersedia.

Walau bagaimanapun, jika objek Promise dikembalikan terus daripada pengendali .then(), seperti dalam:

fetch(url)
  .then(response => response.json())

nilai yang dikembalikan tidak akan menjadi Janji. Janji tidak dibalut selama-lamanya dalam pengendali .then(). Sebaliknya, nilai asas dikembalikan, membenarkan rantaian operasi tak segerak diteruskan.

Akses Nilai melalui Janji yang Dipulangkan

Sebaliknya, jika objek Promise dibenamkan dalam objek yang dikembalikan, seperti:

fetch(url)
  .then(response => {
    return {
      data: response.json(),
      status: response.status
    }
  })

nilai yang dikembalikan daripada Pengendali .then() akan kekal sebagai Janji. Ini kerana objek JavaScript baharu dicipta dan kaedah .json() sedang dipanggil dalam skopnya. Promise yang terhasil diberikan kepada sifat data objek yang dikembalikan.

Pendekatan Alternatif

Untuk mengakses status respons dan data JSON dalam satu pengendali .then(), pendekatan berikut boleh digunakan:

  1. Kembalikan objek Promise terus dan kendalikannya dalam pengendali .then() seterusnya.
  2. Gunakan kaedah .then() pada Promise yang dikembalikan daripada .json() untuk mengekstrak data dan status sebelum mengembalikan objek baharu.
  3. Gunakan async/ menunggu dan bukannya Janji, yang memudahkan tak segerak pengendalian.

Kesimpulan

Memahami gelagat janji kaedah .json() dan cara ia berinteraksi dengan pengendali .then() adalah penting untuk asynchronous yang berkesan pengaturcaraan dengan API fetch(). Dengan memanfaatkan fleksibiliti yang disediakan oleh Promises, pembangun boleh memastikan pengendalian respons HTTP yang cekap dan mengelakkan sarang operasi tak segerak yang tidak perlu.

Atas ialah kandungan terperinci Mengapa Adakah fetch().then().json() Kadang-kadang Memulangkan Janji dan Kadang-kadang Tidak?. 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