앞의 글에 나왔던 Promise는 콜백 패턴의 단점을 보완해주지만 또 다른 문제점이 있다.
이러한 문제를 해결하기 위해 async/await가 등장하였다~!
async / await
를 사용하면 프로미스의 then/catch/finally
후속 처리 메서드를 사용하지 않고 동기 처리처럼 프로미스가 처리 결과를 반환하도록 구현할 수 있다.async function 함수이름() {
return 결과 값;
}
snack().then((value) => console.log(value))
// cake!
snack().then(console.log)
// cake!
async function 함수이름() {
await 비동기 처리 메서드 이름();
}
// 화살표 함수
const 함수이름 = async () => {
await 비동기 처리 메서드 이름();
}
async function foo() {
const res = await Promise.all([
new Promise(resolve => setTimeout(() => resolve(1), 3000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 1000))
]);
console.log(res); // [1, 2, 3]
}
foo(); // 약 3초 소요된다.
const snack = () => Promise.resolve('와, 맛있겠다!');
async function mySnack() {
console.log('치즈 케이크 주세요!');
const res = await snack();
console.log(res);
}
console.log('주문하시겠어요?');
mySnack();
console.log('주문하신 케이크 나왔습니다!');
출력값은?
[참고]
모던 자바스크립트 Deep Dive
알잘딱깔센 JavaScript