Node.js
Node.js ) 프라미스 / 어싱크 / 어웨이트
Hweb
2024. 9. 25. 15:48
1. Promise (프라미스)
프라미스는 비동기 작업의 성공 또는 실패 결과를 나타내는 객체입니다. 작업이 완료되면(성공 또는 실패) 그 결과를 나중에 사용할 수 있습니다. 프라미스는 세 가지 상태를 가집니다:
- Pending: 대기 중인 상태 (작업이 완료되지 않음).
- Fulfilled: 작업이 성공적으로 완료된 상태.
- Rejected: 작업이 실패한 상태.
Promise의 기본 사용법:
let promise = new Promise((resolve, reject) => {
let success = true;
if (success) {
resolve("작업 성공");
} else {
reject("작업 실패");
}
});
promise
.then(result => {
console.log(result); // 작업 성공
})
.catch(error => {
console.log(error); // 작업 실패
});
- then(): 프라미스가 성공적으로 완료되었을 때 실행될 코드를 정의.
- catch(): 프라미스가 실패했을 때 실행될 코드를 정의.
2. Async (어싱크)
async 키워드는 함수 앞에 붙여 비동기 함수를 정의합니다. async 함수는 자동으로 프라미스를 반환하며, 명시적으로 프라미스를 반환하지 않더라도 암묵적으로 프라미스로 래핑됩니다.
Async 함수 예시:
async function fetchData() {
return "데이터 가져오기 성공!";
}
fetchData().then(result => console.log(result)); // 데이터 가져오기 성공!
3. Await (어웨이트)
await 키워드는 async 함수 내에서만 사용할 수 있으며, 프라미스가 해결될 때까지 함수의 실행을 잠시 멈추게 만듭니다. 이때 await는 프라미스가 해결된 값을 반환하고, 프라미스가 거부되면 에러를 던집니다.
Async/await 사용 예시:
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => resolve("데이터 가져오기 성공!"), 2000);
});
}
async function getData() {
try {
let result = await fetchData(); // fetchData가 완료될 때까지 기다림
console.log(result); // 데이터 가져오기 성공!
} catch (error) {
console.log(error); // 에러 처리
}
}
getData();
Promise vs Async/Await 차이점
- Promise: .then()과 .catch()로 비동기 작업 완료 시 코드를 실행합니다.
- Async/Await: await를 사용해 더 직관적이고 동기처럼 보이게 비동기 코드를 작성할 수 있습니다. 코드 가독성이 좋아집니다.
정리
- Promise: 비동기 작업의 성공/실패 상태를 나타내는 객체.
- async: 비동기 함수를 정의하는 키워드.
- await: 프라미스가 해결될 때까지 기다리게 만드는 키워드, 주로 async 함수 내에서 사용.
반응형