Async/await di TypeScript
Artikel ini menjelaskan async/await di TypeScript.
YouTube Video
Async/await di TypeScript
Di TypeScript, async
adalah kata kunci untuk mendeskripsikan operasi asinkron secara ringkas dan berperilaku mirip dengan sintaks async
/await
di JavaScript. Fungsi async
dirancang untuk membuat penanganan fungsi yang mengembalikan Promise menjadi lebih intuitif.
Dasar-dasar Fungsi async
Fungsi yang dideklarasikan dengan kata kunci async
selalu mengembalikan Promise
. Berikut ini adalah contoh dasar:.
1async function fetchData(): Promise<string> {
2 return "Data received";
3}
4
5fetchData().then((data) => console.log(data)); // "Data received"
Pada contoh ini, karena fungsi async
selalu mengembalikan Promise
, nilai yang dikembalikan secara otomatis diselesaikan menggunakan Promise.resolve
. Dengan kata lain, "Data received"
menjadi Promise<string>
dan diperlakukan sebagai operasi asinkron.
Kata Kunci await
Kata kunci await
hanya dapat digunakan di dalam fungsi async
. Ini memungkinkan untuk menghentikan sementara dan menunggu hasil dari sebuah Promise
sebelum melanjutkan eksekusi fungsi.
Pada contoh berikut, proses asinkron menggunakan fetch
ditulis dengan async
/await
.
1async function getUserData() {
2 try {
3 const response = await fetch("https://codesparklab.com/json/example.json");
4 const data = await response.json();
5 console.log(data);
6 } catch (error) {
7 console.error("Error fetching user data:", error);
8 }
9}
10
11getUserData();
Pada contoh ini, await
digunakan untuk menunggu penyelesaian Promise
yang dikembalikan oleh fungsi fetch
, dan hasilnya dimasukkan ke dalam variabel response
. Selain itu, hasil dari response.json()
juga ditunggu dengan await
.
Penanganan Error dengan async
/await
Error yang terjadi selama proses asinkron dapat ditangkap menggunakan sintaks try...catch
standar. Jika terjadi error pada bagian await
, error tersebut akan ditangani di blok catch
.
1async function fetchDataWithErrorHandling() {
2 try {
3 const response = await fetch('https://invalid.codesparklab.com/');
4 if (!response.ok) {
5 throw new Error(`HTTP error! status: ${response.status}`);
6 }
7 const data = await response.json();
8 console.log(data);
9 } catch (error) {
10 console.error("Fetch error:", error);
11 }
12}
13
14fetchDataWithErrorHandling();
Pada contoh di atas, hasil dari fungsi fetch
ditunggu dengan await
, dan jika terjadi error, hal tersebut ditangani dengan try...catch
.
Keunggulan async
/await
-
Pemrosesan asinkron yang intuitif: Dengan menggunakan
async
/await
, alur kode menjadi lebih intuitif dibandingkan menggunakan rantaiPromise
(then
ataucatch
), memungkinkannya ditulis seperti pemrosesan sinkron. -
Penanganan error yang mudah: Menggunakan
try...catch
menyederhanakan penanganan error dalam operasi asinkron. Anda bisa menulis kode yang lebih mudah dibaca dibandingkan dengan menggunakan rantaiPromise
.
Nilai Pengembalian dari Fungsi async
Fungsi async
selalu mengembalikan sebuah Promise
. Oleh karena itu, bahkan tanpa secara eksplisit mengembalikan sebuah Promise
, pemrosesan asinkron tetap dimungkinkan dengan menggunakan kata kunci async
.
1async function example() {
2 return 42;
3}
4
5example().then((result) => console.log(result)); // 42
Dalam kode di atas, sebuah nilai sinkron 42
dikembalikan, tetapi karena berada di dalam fungsi async
, nilai tersebut secara otomatis dikonversi menjadi Promise.resolve(42)
.
Eksekusi Berurutan dari Fungsi Asinkron
Ketika mengeksekusi beberapa fungsi asinkron secara berurutan, Anda dapat menggunakan await
untuk mengontrol urutannya.
1async function fetchData(url: string): Promise<any> {
2 try {
3 const response = await fetch(url);
4 return await response.json();
5 } catch (error) {
6 console.error("Error fetching user data:", error);
7 }
8}
9
10async function fetchData1(): Promise<any> {
11 return await fetchData("https://codesparklab.com/json/example.json");
12}
13
14async function fetchData2(): Promise<any> {
15 return await fetchData("https://codesparklab.com/json/example2.json");
16}
17
18async function processData() {
19 const data1 = await fetchData1();
20 console.log(data1);
21
22 const data2 = await fetchData2();
23 console.log(data2);
24}
25
26processData();
Dalam contoh ini, fetchData2
dieksekusi setelah menunggu fetchData1
selesai. Ini lebih mudah dibaca dibandingkan menggunakan rantai Promise
.
Eksekusi Paralel
Jika Anda ingin menjalankan operasi asinkron secara paralel, Anda dapat menggunakan Promise.all
untuk menangani beberapa Promise
secara bersamaan.
1async function fetchData(url: string): Promise<any> {
2 try {
3 const response = await fetch(url);
4 return await response.json();
5 } catch (error) {
6 console.error("Error fetching user data:", error);
7 }
8}
9
10async function fetchData1(): Promise<any> {
11 return await fetchData("https://codesparklab.com/json/example.json");
12}
13
14async function fetchData2(): Promise<any> {
15 return await fetchData("https://codesparklab.com/json/example2.json");
16}
17
18async function fetchMultipleData() {
19 const [data1, data2] = await Promise.all([fetchData1(), fetchData2()]);
20 console.log(data1);
21 console.log(data2);
22}
23
24fetchMultipleData();
Dalam kasus ini, fetchData1
dan fetchData2
dijalankan bersamaan, dan proses dilanjutkan setelah keduanya diselesaikan. Ini memungkinkan penanganan operasi asinkron secara efisien.
Ringkasan
- Sebuah fungsi
async
mengembalikan sebuahPromise
, dan dengan menggunakan kata kunciawait
, Anda dapat menunggu hasil dari operasi asinkron. - Dengan menggunakan
try...catch
, pengelolaan kesalahan dalam operasi asinkron menjadi lebih sederhana. - Dengan menggunakan
Promise.all
, dimungkinkan untuk mengeksekusi banyak operasi asinkron secara paralel.
async
/await
banyak digunakan di TypeScript dan JavaScript karena memungkinkan penulisan operasi asinkron menjadi lebih sederhana.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.