nest api
resolve 또는 reject를 호출const fetchData = () => {
return new Promise((resolve, reject) => {
// 데이터를 불러오는데 시간이 걸린다고 가정하자
setTimeout(() => {
// 성공적으로 데이터를 불러왔다고 가정하면
resolve("데이터 불러오기 성공");
// 만약 에러가 났다면 아래 줄을 사용
// reject("데이터 불러오기 실패");
}, 1000); // 1초 후에 작업을 완료
});
};
fetchData()
.then((result) => {
console.log(result); // 데이터 불러오기 성공
})
.catch((error) => {
console.error(error); // 데이터 불러오기 실패
});
resolve와 reject는 동시에 호출할 수 없음Promise는 한 번만 상태가 결정되면 그 상태가 고정됨resolve나 reject가 호출되면 그 이후에는 다른 상태로 바꿀 수 없음Promise를 더 쉽게 쓸 수 있는 문법Promise를 반환하고, await 키워드를 사용해서 Promise가 해결될 때까지 기다릴 수 있음const getSunIcon = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("🌞");
}, 1000);
});
};
const getWeatherIcon = async () => {
const sun = await getSunIcon();
// await는 getSunIcon 함수가 반환하는 Promise가 완료될 때까지 기다림
// getSunIcon은 1초 후에 🌞를 반환하는 Promise를 반환하므로, getWeatherIcon은 1초 동안 대기
// sun 변수에는 1초 후에 🌞가 저장
console.log(sun);
};
getWeatherIcon();
// getWeatherIcon 함수가 실행 -> 그 안에서 await getSunIcon()이 실행 -> Promise가 해결될 때까지 기다려야 함
console.log("end");
// getWeatherIcon의 실행과 상관없이 즉시 실행, getWeatherIcon이 실행되는 동안 바로 출력
예외 처리
Promise는 이벤트 루프에 의해 처리되어 주 스레드가 다른 작업을 처리할 수 있도록 함async/await을 사용할 때, await가 자원을 잠그는 효과처럼 보일 수 있음await가 호출된 부분에서 해당 Promise가 완료될 때까지 그 부분을 "lock" 시킨다고 비유await는 이벤트 루프를 이용해 비동기적으로 기다림