async 함수와 await 키워드를 이해하고, 이를 사용하여 비동기 코드를 간결하고 직관적으로 작성하는 방법을 학습한다.
1. async 함수와 await 키워드
async 함수란?
· async 키워드를 함수 앞에 붙여 사용하면 해당 함수는 항상 프로미스를 반환한다.
· async 함수 내에서 비동기 작업을 수행하고, 해당 작업이 완료될 때까지 기다린 후 결과를 반환한다.
await 키워드란?
· await 키워드는 async 함수 내에서만 사용할 수 있다.
· await 키워드를 사용하면 프로미스가 해결될 때까지 기다렸다가, 프로미스의 결과를 반환한다.
· await는 then 메서드를 사용하지 않고도 프로미스의 결과를 간단하게 다룰 수 있게 해준다.
기본 사용법
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
}
2. async/await의 비동기 처리 예제
기본 예제
· async 함수와 await 키워드를 사용하여 데이터를 비동기적으로 가져오는 예제.
async function getData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
const data = await response.json();
console.log('Data:', data);
} catch (error) {
console.error('Error:', error);
} finally {
console.log('Fetch operation complete');
}
}
getData();
Node.js 비동기 함수 사용 예제
· Node.js의 fs 모듈을 사용하여 파일을 비동기적으로 읽는 예제.
const fs = require('fs').promises;
async function readFileContent(filePath) {
try {
const data = await fs.readFile(filePath, 'utf8');
console.log('File content:', data);
} catch (error) {
console.error('Error reading file:', error);
} finally {
console.log('Read operation complete');
}
}
readFileContent('example.txt');
3. async/await의 장점
· 가독성 향상: 코드가 더 읽기 쉽고 직관적이다. then 체이닝 대신 동기 코드처럼 작성할 수 있다.
· 에러 처리 간편화: try와 catch 블록을 사용하여 에러를 쉽게 처리할 수 있다.
· 디버깅 용이: 디버깅이 더 쉽다. 콜백이나 프로미스 체이닝보다 호출 스택이 더 명확하다.
비교: 프로미스 체이닝과 async/await
· 프로미스 체이닝 예제
fetch('https://jsonplaceholder.typicode.com/posts/1')
.then((response) => response.json())
.then((data) => {
console.log('Data:', data);
})
.catch((error) => {
console.error('Error:', error);
})
.finally(() => {
console.log('Fetch operation complete');
});
· async/await 사용 예제
async function fetchData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
const data = await response.json();
console.log('Data:', data);
} catch (error) {
console.error('Error:', error);
} finally {
console.log('Fetch operation complete');
}
}
fetchData();
4. 실습: async/await 사용하기
4-1. 기본 async/await 사용
· async 함수와 await 키워드를 사용하여 데이터를 비동기적으로 가져오는 함수를 작성하세요.
예제
async function getData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
const data = await response.json();
console.log('Data:', data);
} catch (error) {
console.error('Error:', error);
} finally {
console.log('Fetch operation complete');
}
}
getData();
4-2. Node.js 비동기 함수 사용
· fs 모듈을 사용하여 파일을 비동기적으로 읽고, 내용을 출력하는 함수를 작성하세요.
예제
const fs = require('fs').promises;
async function readFileContent(filePath) {
try {
const data = await fs.readFile(filePath, 'utf8');
console.log('File content:', data);
} catch (error) {
console.error('Error reading file:', error);
} finally {
console.log('Read operation complete');
}
}
readFileContent('example.txt');
- 이전 수업 목록
'프로그래밍 > Node.js' 카테고리의 다른 글
[Node.js 강의 시리즈] 18강 - Express를 사용한 웹 서버 구축 (1) | 2024.07.17 |
---|---|
[Node.js 강의 시리즈] 17강 - 비동기 처리 패턴 비교 (0) | 2024.07.16 |
[Node.js 강의 시리즈] 15강 - 프로미스 (Promise) (0) | 2024.07.12 |
[Node.js 강의 시리즈] 14강 - 비동기 프로그래밍 심화 (0) | 2024.07.11 |
[Node.js 강의 시리즈] 13강 - 유용한 NPM 명령어 (0) | 2024.07.10 |