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
Patricia Arquetteasal
2024-12-31 19:08:12773semak imbas

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));

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));

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
    })

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!

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