Node.js는 싱글 스레드이기 때문에 event 기반 비동기 방식으로 일을 처리한다. event는 callback function, Promise, Async/Await 세 가지 방식으로 처리할 수 있다
어떤 이벤트 발생 시, 특정 시점에 도달했을 때 호출되는 함수로서 다른 함수의 인자로 사용된다
setTimeout(():void=>{
console.log('3초 경과');
}, 3000);
setTimeout()에 인자로 람다 함수와 3000을 넣어준 걸 확인할 수 있다.
문제는 콜백 지옥에 빠질 수 있다는 점.. 콜백 함수가 많아지면 그만큼 가독성이 떨어진다 그래서 나온게 2번
Promise는 3가지 상태(status)가 있다
Promise의 생성자에 execute라는 콜백함수를 전달해주어야 하고, execute안에는 또 resolve 콜백함수와 reject 콜백함수를 전달할 수 있다
// 1. Producer
const promise = new Promise((reslove, rejcct) => {
// 네트워크 통신이라든지 파일 읽기라든지 뭔 일 수행
setTimeout(()=>{
reslove('성공');
}, 2000);
});
// consumer
promise
.then(value=> { // reslove에서 인자로 넣어준 '성공'이 value로 들어옴
console.log(`${value}`);
})
.catch(error => {
console.log(`${error}`)
});
promise를 이해하기 위해서는 producer 개념과 consumer 개념을 구분해주어야 한다
producer - 데이터를 제공하는 사람
consumer - 데이터를 받는 사람
Promise를 보다 쉽게 사용할 수 있도록 돕는 애들이 async / await이다. 얘네들을 사용하면 비동기 처리가 동기 처리처럼 보임
async - 암묵적으로 promise를 반환
// 함수 선언식
async function 함수이름 (){
}
// 함수 표현식
const 변수이름 = async () => {
}
그냥 일반적인 함수 앞에 async 키워드가 붙은 걸로 이해하면 됨
await - Promise를 기다린다. async가 정의된 내부에서만 사용한다