Rumah > hujung hadapan web > tutorial js > Mengapa Kaedah `.json()` Fetch API Mempunyai Gelagat Janji yang Berbeza?

Mengapa Kaedah `.json()` Fetch API Mempunyai Gelagat Janji yang Berbeza?

Patricia Arquette
Lepaskan: 2024-12-31 19:08:12
asal
774 orang telah melayarinya

Why Does Fetch API's `.json()` Method Have Different Promise Behaviors?

Pengendalian Janji dalam API Ambil: Mengapa Gelagat .json() Berbeza

Apabila bekerja dengan API fetch(), perbezaan yang ketara dalam tingkah laku timbul apabila menggunakan . json() kaedah. Tingkah laku ini mungkin kelihatan berlawanan dengan intuisi, jadi mari kita selidiki sebab asas.

Promise Nature of .json()

Secara lalai, .json() mengembalikan janji yang diselesaikan kepada respons JSON yang dihuraikan badan. Ini kerana badan tindak balas mungkin tidak tersedia serta-merta, terutamanya untuk respons besar atau sambungan perlahan. Janji memastikan bahawa kod berikutnya tidak dilaksanakan sehingga JSON dihuraikan sepenuhnya.

Janji Janji dan Pulangan Nilai

Apabila .json() digunakan dalam rantai .then(), ia mengembalikan objek janji itu sendiri, membenarkan rantaian operasi selanjutnya. Walau bagaimanapun, apabila .json() dikembalikan terus daripada pengendali .then(), nilai janji yang telah diselesaikan (JSON yang dihuraikan) dikembalikan sebaliknya. Ini kerana pengendali .then() mengharapkan untuk menerima nilai yang boleh dimanipulasi selanjutnya.

Contoh:

Dalam coretan kod yang disediakan:

fetch(url)
  .then(response => {
      return {
          data: response.json(),
          status: response.status
      }
  })
  .then(post => document.write(post.data));
Salin selepas log masuk

Kaedah .json() dirantai dalam objek literal, jadi ia mengembalikan objek janji, menghasilkan atribut post.data menjadi Janji.

Sintaks Alternatif:

fetch(url)
  .then(response => response.json())
  .then(post => document.write(post.title));
Salin selepas log masuk

Dalam contoh ini, .json() dikembalikan terus daripada pengendali .then() , jadi nilai JSON yang diselesaikan segera dikembalikan, membenarkan akses terus kepada atribut post.title.

Janji Janji dan Janji Bersarang

Untuk mengelakkan percanggahan antara literal objek dan nilai pulangan langsung, anda boleh menggunakan sintaks berikut:

fetch(url)
.then(response => 
    response.json().then(data => ({
        data: data,
        status: response.status
    })
Salin selepas log masuk

Pendekatan ini mengembalikan janji bersarang yang akhirnya diselesaikan kepada objek yang diingini .

Kesimpulan

Tingkah laku janji .json() bergantung pada cara ia digunakan dalam kod. Apabila merantai operasi, ia mengembalikan objek janji, memastikan penjujukan yang betul. Walau bagaimanapun, apabila mengembalikan .json() terus daripada pengendali .then(), nilai yang diselesaikan (dihuraikan JSON) dikembalikan, membenarkan penggunaan segera. Memahami perbezaan ini adalah penting untuk mengurus janji dan mengelakkan tingkah laku yang tidak dijangka dalam kod anda.

Atas ialah kandungan terperinci Mengapa Kaedah `.json()` Fetch API Mempunyai Gelagat Janji yang Berbeza?. 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