둘 이상의 객체 또는 이벤트가 동시에 존재하지 않거나 발생하지 않는 경우 이다.
강의에서 나온대로 "라면 끓이기"로 예시를 들자면
현실
1. 물 끓이기 5분
2. 스프 넣기 10초
3. 면 넣기 10초
4. 라면 끓이기 3분
5. 먹기
현실에서는 다음과 같이 순차적으로 라면 끓이기가 진행이 되어
8분 20초에 완료가 된다.
[Node]
하지만 Node에서는 동시에 1~4번 진행되어 => 5분만에 완료가 되었다.
즉 다른 작업들을 기다리지 않고 바로 바로 작업을 실행하였다.
다른 작업들을 기다리지 않기 때문에 빠르게 완료할 수 있다는 장점도 있지만
내가 원하는 시점에 작업을 하지 못하는 경우 위의 라면 끓이기로 예시를 들어보아도
라면이 다 익지도 않았는데 작업이 완료될 수 도 있다.
위와 같은 비동기 문제를 해결하기 위해
비동기를 처리하는 방법은 다음과 같다
이중 JS ES8에 추가된 async/await를 사용해보았다.
const 비동기 = async () => {
let promise1 = new Promise((resolve, reject) => {
setTimeout(() => resolve('1번 완료'), 3000);
});
let result1 = await promise1;
console.log(result1);
let promise2 = new Promise((resolve, reject) => {
setTimeout(() => resolve('2번 완료'), 3000);
});
let result2 = await promise2;
console.log(result2 + ' + ' + result1);
let promise3 = new Promise((resolve, reject) => {
setTimeout(() => resolve('3번 완료'), 3000);
});
let result3 = await promise3;
console.log(result3 + ' + ' + result2 + ' + ' + result1);
};
비동기();
다음과 같은 예시 코드가 있을 때
"비동기"라는 이름의 비동기 함수를 정의하였고
첫번째 promise인 promise1을 생성하고 3초동안 대기 후 완료되게 하였다.
이때 promise1이 완료되기를 기다린 후 완료시키는 것이 await의 역할이다.
이후로는 promise2 ... promise3이 연이어 동일한 과정을 반복하며 앞서 출력된 결과도
가져올 수 가 있다.