async & await : 비동기식 코드를 동기식으로 표현하여 간단하게 나타내는 것
async function
과 await
키워드는 Promise
의 결과값을 then
과 catch
를 통해 다루지 않고,
변수에 담아 동기적 코드처럼 작성해줄 수 있다는 점에서 편리함을 제공합니다.
또한 async
와 await
는 Promise
객체를 반환하며 => then
을 사용할 수 있습니다.
async function 함수명() {
await 비동기_처리_메서드_명();
}
async : 비동기 작업을 만드는 손쉬운 방법
async
함수는 함수를 선언할 때 붙여줄 수 있습니다.
async
가 붙은 함수는 항상 Promise를 반환합니다.
기존의 비동기 처리 방식인 콜백 함수와 프로미스의 단점을 보완할 수 있습니다!
특히나 복잡했던 Promise
를 조금 더 편하게 사용할 수 있습니다.
await : promise가 처리될 때까지 함수 실행을 기다리게 만든다.
await
는 async
함수 안에서만 동작합니다.
await
라는 말 그대로 promise
가 처리될 때까지 기다린 후 결과가 반환됩니다.
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("완료!"), 1000)
});
let result = await promise; // 프라미스가 이행될 때까지 기다림 (*)
console.log(result); // "완료!"
}
f();
f
함수를 호출한 뒤 함수 본문이 실행되는 도중 await promise
에서 실행이 잠시 중단됩니다.
1초 뒤 result
의 값이 할당되어지고 완료!
가 출력됩니다.
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
//2초동안 기다리게 하고 사과를 리턴하는 메서드
async function getApple() {
await delay(2000)
return '🍎'
}
//1초동안 기다라게 하고 사과를 리턴하는 메서드
async function getBanana() {
await delay(1000)
return '🍌'
}
getApple().then(console.log) // 결과 : 🍎
getBanana().then(console.log) // 결과 : 🍌
위에서 사과와 바나나를 출력하였을 때 생각보다 단순한 코드 진행을 볼 수 있었습니다.
이렇듯 async 와 await를 사용하면 예측이 불가능했던 비동기 작동 방식이 동기적으로 실행되는 코드처럼 예측이 가능해질 수 있습니다.
async
와 await
를 사용하면 await
가 대기하는 것을 처리해주기 때문에 .then
이 거의 필요하지 않습니다.
또한 promise
에서 에러를 제어해주던 .catch
대신 try-catch를 사용할 수 있다는 장점도 있습니다.
callback
promise
async/await
는 js
에서 비동기를 처리할 수 있게 하는 방법들이지만 각각 약간씩의 차이점이 존재합니다.
catch
로 에러 처리 가능await
로 promise
가 다 처리될 때까지 기다려, 비동기식 코드를 동기식으로 표현하여 간단하게 나타냄try, catch
로 에러 처리 가능