Seperti yang telah kita ketahui, fetch memanfaatkan promise dalam melakukan tugasnya, sehingga network request yang dibuat memakai fetch akan sering berjalan asynchronous.
Pemakaian dasar dari fetch terlihat semacam ini:
Network request dilakukan terhadap saat fungsi fetch() tereksekusi.
- fetch(“https://web-server-book-dicoding.appspot.com/daftar”)
Bila request berhasil diproses oleh server, fungsi fetch() akan mengembalikan promise resolve dan membawa response object di dalamnya. Tetapi nilai response yang dibawa resolve belum sebagai data JSON yang kita perlukan, tetapi informasi tentang response itu sendiri, seperti status code, target url, headers, dsb. Oleh sebab itu, agar mendapatkan data JSON yang diperlukan, kita harus merubah response object ke dalam wujud JSON dengan memanggil method .json().
-
- fetch(“https://web-server-book-dicoding.appspot.com/daftar”)
-
- .then(response => {
-
- return response.json();
- })
Method .json() juga mengembalikan nilai Promise, sehingga kita memerlukan chaining promise dengan menambahkan .then() agar mendapatkan data JSON yang sebenarnya.
-
- fetch(“https://web-server-book-dicoding.appspot.com/daftar”)
-
- .then(response => {
-
- return response.json();
-
- })
-
- .then(responseJson => {
-
- console.log(responseJson);
- })
Lalu jangan sampai lupa juga untuk menambahkan block catch() di akhir chaining promise untuk menangani jika rejected promise terjadi baik sebab fungsi fetch() atau json().
-
- fetch(“https://web-server-book-dicoding.appspot.com/daftar”)
-
- .then(response => {
-
- return response.json();
-
- })
-
- .then(responseJson => {
-
- console.log(responseJson);
-
- })
-
- .catch(error => {
-
- console.log(error);
- });
Sebab fetch memanfaatkan promise, kita dapat memanfaatkan async/await bila Kamu lebih suka dengan gaya penulisan synchronous.
-
- fetch(“https://web-server-book-dicoding.appspot.com/daftar”)
-
- .then(response => {
-
- return response.json();
-
- })
-
- .then(responseJson => {
-
- console.log(responseJson);
-
- })
-
- .catch(error => {
-
- console.log(error);
- });
-
- async/await
-
- async function getBooks() {
-
- try {
-
- const response = await fetch(“https://web-server-book-dicoding.appspot.com/daftar”);
-
- const responseJson = await response.json();
-
- console.log(responseJson);
-
- } catch (error) {
-
- console.log(error);
-
- }
-
- }
- getBooks();
Advanced Fetch Usage
Fungsi fetch() bisa menerima dua buah patokan di dalamnya. Selain menetapkan target URL, kita juga bisa memberikan options untuk menetapkan method, header, body, dsb pada request yang akan dijalankan. Tetapi penerapan options ini bersifat pilihan. Tidak wajib.
Pemakaian fetch() tanpa menerapkan options akan membuat GET request sederhana yang ditujukkan pada targetUrl. Hal itu sama seperti yang telah kita lakukan sebelumnya. Lantas kapan kita harus menerapkan options pada pemakaian fetch? Berikut sejumlah kasus ketika kita membutuhkannya.
Changing Request Method
Untuk membuat POST request maupun method request lainnya kita harus menerapkan options dengan properti method di dalamnya.
fetch(“https://web-server-book-dicoding.appspot.com/add”, {
method: “POST”
})
Nilai dari properti method dituliskan dalam wujud string, misalnya “POST”, “PUT”, “DELETE”, dsb. Nilai default dari properti ini merupakan “GET”, sehingga bila kita membuat GET Request, kita tidak mesti menetapkan nilai method secara eksplisit.
Set Header Property
Untuk menambahkan request header dengan fetch kita pakai properti headers pada options. Misalnya, untuk menambahkan properti Content-Type dengan nilai application/json pada headers kita bisa melakukannya dengan semacam ini:
-
- fetch(“https://web-server-book-dicoding.appspot.com/add”, {
-
- method: “POST”,
-
- headers: {
-
- “Content-Type”: “application/json”
-
- }
- })
Tentu kita juga bisa menetapkan lebih dari satu properti pada headers. Misalnya kita tambahkan lagi properti X-Auth-Token dengan nilai 12345.
-
- fetch(“https://web-server-book-dicoding.appspot.com/add”, {
-
- method: “POST”,
-
- headers: {
-
- “Content-Type”: “application/json”,
-
- “X-Auth-Token”: “12345”
-
- }
- })
Set Data to Body Request
Untuk mengirimkan data pada body request kita pakai properti body pada options, misalnya semacam ini:
-
- fetch(“https://web-server-book-dicoding.appspot.com/add”, {
-
- method: “POST”,
-
- headers: {
-
- “Content-Type”: “application/json”,
-
- “X-Auth-Token”: “12345”
-
- },
-
- body: JSON.stringify({
-
- id: 10,
-
- title: “Edensor”,
-
- author: “Andrea Hirata”
-
- })
- })
Sama seperti XHR, data yang dikirimkan melalui body request perlu diubah jadi JSON String terlebih dulu.
-
- body: JSON.stringify({
-
- id: 10,
-
- title: “Edensor”,
-
- author: “Andrea Hirata”
- })
Kamu bisa coba lakukan POST Request memakai Fetch dengan menjalankan potongan kode itu.