TypeScript의 Async/await
이 글은 TypeScript에서의 async/await에 대해 설명합니다.
YouTube Video
TypeScript의 Async/await
async
는 TypeScript에서 비동기 작업을 간결하게 표현하기 위한 키워드이며 JavaScript의 async
/await
구문과 유사하게 동작합니다. async
함수는 Promise를 반환하는 함수를 더 직관적으로 처리할 수 있도록 설계되었습니다.
async
함수의 기본
async
키워드로 선언된 함수는 항상 Promise
를 반환합니다. 다음은 기본 예제입니다:.
1async function fetchData(): Promise<string> {
2 return "Data received";
3}
4
5fetchData().then((data) => console.log(data)); // "Data received"
이 예제에서 async
함수는 항상 Promise
를 반환하므로 반환된 값은 자동으로 Promise.resolve
를 사용해 resolve됩니다. 다시 말해, "Data received"
는 Promise<string>
이 되어 비동기 작업으로 처리됩니다.
await
키워드
await
키워드는 오직 async
함수 내부에서만 사용할 수 있습니다. 이 키워드는 기능 실행을 일시적으로 멈추고 Promise
의 결과를 기다릴 수 있는 기능을 제공합니다.
다음 예제는 fetch
를 사용한 비동기 처리를 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();
이 예제에서 fetch
함수가 반환하는 Promise
의 완료를 기다리기 위해 await
가 사용되었고 그 결과가 변수 response
에 할당됩니다. 또한, response.json()
의 결과도 기다립니다.
async
/await
로 오류 처리하기
비동기 처리 중 발생하는 오류는 표준 try...catch
구문을 사용해 잡을 수 있습니다. await
부분에서 오류가 발생하면 그 오류는 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();
위 예제에서는 fetch
함수의 결과를 await
로 대기하고, 오류가 발생하면 try...catch
로 처리됩니다.
async
/await
의 장점
-
직관적인 비동기 처리:
async
/await
를 사용하면 코드 흐름이Promise
체인(then
또는catch
)을 사용할 때보다 더 직관적이며 동기 처리처럼 작성할 수 있습니다. -
간편한 오류 처리:
try...catch
를 사용하면 비동기 작업에서 오류 처리가 간단해집니다.Promise
체인을 사용하는 것보다 더 가독성 높은 코드를 작성할 수 있습니다.
async
함수의 반환 값
async
함수는 항상 Promise
를 반환합니다. 따라서, Promise
를 명시적으로 반환하지 않아도 async
키워드를 사용하여 비동기 처리가 가능합니다.
1async function example() {
2 return 42;
3}
4
5example().then((result) => console.log(result)); // 42
위 코드에서 동기 값 42
가 반환되지만, async
함수 내부이므로 자동으로 Promise.resolve(42)
로 변환됩니다.
비동기 함수의 순차 실행
여러 비동기 함수를 연속적으로 실행할 때 await
를 사용하여 실행 순서를 제어할 수 있습니다.
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();
이 예제에서는 fetchData1
이 완료될 때까지 대기한 후 fetchData2
가 실행됩니다. 이것은 Promise
체인을 사용하는 것보다 가독성이 좋습니다.
병렬 실행
비동기 작업을 병렬로 실행하려면 Promise.all
을 사용하여 여러 Promise
를 동시에 처리할 수 있습니다.
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();
이 경우, fetchData1
과 fetchData2
가 동시에 실행되며, 둘 다 완료된 후 프로세스가 진행됩니다. 이를 통해 여러 비동기 작업을 효율적으로 처리할 수 있습니다.
요약
async
함수는Promise
를 반환하며,await
키워드를 사용하여 비동기 작업의 결과를 대기할 수 있습니다.try...catch
를 사용하면 비동기 작업의 에러 처리가 간단해집니다.Promise.all
을 사용하면 여러 비동기 작업을 병렬로 실행할 수 있습니다.
async
/await
는 비동기 작업을 더 간단하게 설명할 수 있기 때문에 TypeScript와 JavaScript에서 널리 사용됩니다.
위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.