Async/await dalam JavaScript

Async/await dalam JavaScript

Dalam artikel ini, kami akan menjelaskan async/await dalam JavaScript.

YouTube Video

Async/await dalam JavaScript

async (dan await) dalam JavaScript adalah fitur yang dirancang untuk membuat penulisan operasi asinkron lebih intuitif dan mudah dibaca. Dengan menggunakan ini, Anda dapat mengurangi kompleksitas fungsi callback tradisional dan rantai Promise, serta menulis kode asinkron dengan cara yang terlihat seperti kode sinkron.

Fungsi async

async digunakan untuk mendefinisikan sebuah fungsi sebagai fungsi asinkron. Fungsi async selalu mengembalikan sebuah Promise. Dalam sebuah fungsi yang ditandai dengan async, Anda dapat menggunakan await untuk menunggu hasil dari sebuah Promise untuk dikembalikan.

Sintaks Dasar dari Fungsi async

1async function myAsyncFunction() {
2    // Write asynchronous processing here
3    return 'Result';  // Return a Promise
4}

Dalam kasus ini, memanggil myAsyncFunction() secara otomatis mengembalikan objek Promise. Ketika Promise diselesaikan, hasilnya menjadi nilai yang dikembalikan oleh return.

Contoh: Fungsi async Dasar

1async function greet() {
2    return 'Hello, World!';
3}
4
5greet().then((message) => {
6    console.log(message);  // Displays "Hello, World!"
7});

await

await digunakan untuk menunggu sebuah Promise diselesaikan. Dengan menggunakan await, Anda dapat menghentikan sementara eksekusi hingga Promise diselesaikan dan menerima hasil dari Promise tersebut. await hanya dapat digunakan di dalam fungsi async.

Contoh: Cara Menggunakan await

 1async function fetchData() {
 2    // Wait for the result of the Promise
 3    const data = await fetch('https://codesparklab.com/json/example.json');
 4    // Wait for the asynchronous operation to complete
 5    const jsonData = await data.json();
 6    // Retrieve and display the data
 7    console.log(jsonData);
 8}
 9
10fetchData();

Dalam contoh di atas, fungsi menunggu Promise yang dikembalikan oleh fungsi fetch menggunakan await, lalu melanjutkan operasi asinkron menggunakan hasilnya.

Penanganan Error dengan async/await

Jika terjadi error di dalam fungsi async, error tersebut dianggap sebagai reject dari Promise. Anda dapat menggunakan pernyataan try...catch untuk melakukan penanganan error.

Contoh: Penanganan Error

 1async function fetchData() {
 2    try {
 3        // Invalid URL
 4        const data = await fetch('https://api.invalid-url.com/data');
 5        const jsonData = await data.json();
 6        console.log(jsonData);
 7    } catch (error) {
 8        // Catch the error
 9        console.error('Failed to fetch data:', error);
10    }
11}
12
13fetchData();

Menggunakan blok try...catch memungkinkan Anda menangkap error yang terjadi selama operasi asinkron, mencegah program crash ketika error terjadi.

Manfaat dari async/await

Dibandingkan dengan rantai Promise tradisional, async/await menawarkan keuntungan-keuntungan berikut:.

  • Keterbacaan yang lebih baik
    • Proses asinkron dapat ditulis seperti kode sinkron, sehingga menghindari kompleksitas rantai Promise dan callback yang sangat bersarang.
  • Debugging lebih mudah
    • Karena tampilannya seperti kode sinkron, debugging dan penanganan error menjadi lebih mudah.
  • Kemudahan pemeliharaan yang lebih baik
    • Proses asinkron dapat ditulis dengan lebih sederhana, sehingga memudahkan dalam mengubah atau memodifikasi kode dan meningkatkan pemeliharaan jangka panjang.

Contoh: Rantai Promise vs async/await

Mari kita bandingkan kode yang menggunakan rantai Promise dan kode yang menggunakan async/await.

 1// Code using Promise chains
 2function fetchDataPromise() {
 3    fetch('https://codesparklab.com/json/example.json')
 4        .then((response) => response.json())
 5        .then((data) => {
 6            console.log(data);
 7        })
 8    .catch((error) => {
 9        console.error('Failed to fetch data:', error);
10    });
11}
12
13// Code using async/await
14async function fetchDataAsync() {
15    try {
16        const response = await fetch('https://codesparklab.com/json/example.json');
17        const data = await response.json();
18        console.log(data);
19    } catch (error) {
20        console.error('Failed to fetch data:', error);
21    }
22}

Seperti yang dapat Anda lihat, menggunakan async/await memungkinkan Anda untuk menulis proses asinkron secara linear, sehingga menghasilkan kode yang lebih mudah dibaca.

Melaksanakan beberapa operasi asinkron secara bersamaan

Dengan menggabungkan Promise.all() atau Promise.race() dengan await, Anda dapat melaksanakan beberapa operasi asinkron secara bersamaan dan menangani hasilnya sekaligus.

Contoh: Melaksanakan beberapa operasi asinkron secara bersamaan

 1async function fetchMultipleData() {
 2    try {
 3        const [data1, data2] = await Promise.all([
 4            fetch('https://codesparklab.com/json/example1.json'),
 5            fetch('https://codesparklab.com/json/example2.json')
 6        ]);
 7        const jsonData1 = await data1.json();
 8        const jsonData2 = await data2.json();
 9        console.log(jsonData1, jsonData2);
10    } catch (error) {
11        console.error('Failed to fetch data:', error);
12    }
13}
14
15fetchMultipleData();

Promise.all() menyelesaikan beberapa Promise secara bersamaan dan mengembalikan hasilnya sebagai array. Ini menunggu semua Promise terselesaikan, dan jika ada yang gagal, maka dianggap gagal secara keseluruhan.

Ringkasan

  • Fungsi async: Selalu mengembalikan Promise dan digunakan untuk menulis pemrosesan asinkron.
  • await: Digunakan untuk menunggu suatu Promise selesai dan menerima hasilnya.
  • Penanganan error: Gunakan try...catch untuk menangani error yang terjadi selama pemrosesan asinkron.
  • Beberapa operasi asinkron: Anda dapat melaksanakan beberapa operasi asinkron secara bersamaan menggunakan Promise.all().

async/await adalah alat yang kuat untuk menangani pemrosesan asinkron, jadi pastikan untuk menggunakannya agar dapat menyederhanakan logika asinkron yang kompleks.

Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.

YouTube Video