지난 포스트 내용에 이어서 async/await는 promise와 동일하게 비동기 코드를 동기처럼 보이도록 하고 작동한다. 가장 최신문법에 포함된 내용으로 사용법을 알아보자.
//예제1
function delay() {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), 1000);
})
}
async function getApple() {
await delay();
return "apple";
}
async function getBanana() {
await delay();
return "banana";
}
function getFruites() {
getApple()
.then((a) => { // 리턴값이 promise의 resolve()이므로 then 가능
getBanana()
.then((b) => console.log(`${a} and ${b}`));
})
}
getFruites(); // 결과 : apple and banana
/예제2
function delay() {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), 1000);
})
}
async function getApple() {
await delay();
return "apple";
}
async function getBanana() {
await delay();
return "banana";
}
async function getFruites() {
let a = await getApple(); // 리턴값이 promise의 resolve()이므로 대입 가능
let b = await getBanana(); // getApple()이 처리되고 getBanana()가 처리됩니다.
console.log(`${a} and ${b}`);
}
getFruites(); // 결과 : apple and banana
//then, catch문이 아닌 예외처리 방법
async function myAsyncFunTryCatch1() {
console.log(new Date());
try {
await rejectedWait(1); // throw 되었다.
} catch (e) {
console.error('myAsyncFunTryCatch1', e);
}
// 그 다음일들을 쭉쭉할 수 있다.
console.log(new Date());
}
const resultAsyncFunTryCatch1 = myAsyncFunTryCatch1();