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:
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!