nodejs는 기본적으로 동기
이벤트 루프
호출스택에서 순서대로 백그라운드에 들어가서 동시에 작업이 이뤄짐
작업이 완료된 순서대로 테스크 큐에 들어감 순서대로 출력됨
delay함수는 콜백을 이용해서 setTimeout을 실행한다.
const delay = (wait, callback) => {
setTimeout(callback, wait);
}
sleep함수는 Promise를 사용해서 setTimeout을 실행한다.
const sleep = (wait) => {
return new Promise((resolve) => {
setTimeout(resolve, wait);
});
}
resolve는 비동기 처리가 완료되었을때, 콜백함수의 인자 resolve를 실행하면 이행(Fulfilled) 상태가 된다.
이때 resolve는 인자로 실행 결과를 받는다.
reject는 비동기 처리가 실패하였을때, 콜백함수의 인자 reject를 실행하면 실패(Rejected) 상태가 된다.
이때 reject는 인자로 new Error()를 작성하여 error 메세지를 표출한다.
all: ƒ all() -> 배열안에 비동기 메서드를 각각 요소로 넣고 결과를 반환한 배열을 반환한다.
catch: ƒ catch() -> 오류를 인자로 받아 오류를 출력해줌
constructor: ƒ Promise() -> Promise 생성자 함수
finally: ƒ finally() -> 성공 실패 여부 상관없이 콜백함수 실행
then: ƒ then() -> resolve나 reject의 인자값을 받아온다. 콜백함수 실행
Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태
new Promise() 메서드를 호출하면 대기(Pending)상태가 된다.
Fulfilled(이행) : 비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태
Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태
await은 Promise가 fulfill되기를 기다렸다가, 해당 값을 리턴합니다.
const sleep = (wait) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve('hello')
}, wait);
});
}
let returnValue = await sleep(1000);
returnValue // outPut -> 'hello'
resolve로 전달한 값이 리턴되어 변수에 할당된다.