요청과 결과가 동시에 일어나는 방식으로 요청을 보낸 후 응답을 받아야 다음 동작이 진행된다.
요청과 결과가 동시에 일어나지 않는 방식으로 요청과 결과가 동시에 일어나지 않는다.
논증은 증명 또는 입증이라고도 하며, 어떤 판단이 참(眞)이란 것의 이유를 부여하거나 명확하게 보여줄 때 논증한다고 말한다.
async와 await은 자바스크립트의 비동기 처리 패턴 중 가장 최근에 나온 ES8에 해당하는 문법이다.
기본적인 사용법은 이렇다.
const sleep = (ms) => {
return new Promise((resolve) => setTimeout(resolve, ms));
};
const process = async () => {
console.log("처음뵙겠습니다 ooo입니다.");
await sleep(2000);//2초후
console.log("저는 xxx입니다. 반갑습니다.");
};
process();
async/await
문법을 사용할 때에는, 함수를 선언 할 때 함수의 앞부분에 async
키워드를 붙여준다. 그리고 Promise 앞부분에 await
을 넣어주면 해당 프로미스가 끝날때까지 기다렸다가 다음 작업을 수행 할 수 있다.
위 코드에서는 sleep
이라는 함수 만들어서 파라미터로 넣어준 시간만큼 기다리는 Promise를 만들고, 이를 process
함수에서 사용해줬다.
const sleep = (ms) => {
return new Promise(resolve => setTimeout(resolve, ms));
}
const process = async () => {
console.log('안녕하세요!');
await sleep(1000); // 1초쉬고
console.log('반갑습니다!');
}
process().then(() => { //.then() process function이 끝나서 나서 실행됨.
console.log('작업이 끝났어요!');
});
async
함수에서 에러를 발생시키려면 throw
를 사용하고, 에러를 잡아내려면 try/catch
문을 사용한다.
const sleep = (ms) => {
return new Promise(resolve => setTimeout(resolve, ms));
}
const makeError = async () => {
await sleep(2000);
const error = new Error();
throw error;
}
const process = async () => {
try {
await makeError();
} catch (e) {
console.error(e);
}
}
process();
참조
https://github.com/Febase/FeBase/blob/master/Javascript/Asynchronous.md