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
Lepaskan: 2024-12-29 01:00:11
asal
873 orang telah melayarinya

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())
Salin selepas log masuk

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
    }
  })
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan