그 첫번째 주자는 첫 날부터 지금까지 나를 너무나도 힘들게 하는 Promise..
프로미스는 자바스크립트 비동기 처리에 사용되는 객체
(비동기 처리 : 특정 코드의 실행이 완료될 때까지 기다리지 않고 다음 코드를 먼저 수행)
쉽게 말해 이름 그대로, '지금은 내가 가지고 있는 값이 없으니까 나중에 줄게" 라는 약속이라고 생각하면 조금은 편하다고 한다..
프로미스는 Pending, Fulfilled, Rejected 중 하나의 상태를 가지고 있다.
Pending(대기) : 이행하거나 거부되지 않은 초기 상태
Fulfilled(이행) : 연산이 성공적으로 완료
Rejected(실패) : 연산이 실패
기업 협업을 진행하면서 프로미스를 사용할 일이 많이 있었고, 아래는 실제 사용되었던 선언부의 예제이다.
정상적으로 값이 입력된다면 해당 requests를 resolve할 수 있도록, 그렇지 않다면 reject할 수 있도록 프로미스를 return해준다.
현재 아래의 프로미스는 풀어주지 않았기 때문에 pending 상태를 나타내고 있다.
<Promise 선언부 예시>
return new Promise((resolve, reject) => {
docClient.put(params, (err, data) => {
if(err) {
console.error("Unable to orders add", JSON.stringify(err, null, 2))
reject(false)
} else {
console.log("Add Request", JSON.stringify(data, null, 2))
resolve(requests)
}
})
})
리턴된 프로미스 객체가 정상적으로 작업이 완료 되었을 때에는 then, 에러가 발생할 때는 catch를 통해 프로미스를 풀어줄 수 있도록 한다.
<Promise 실행부 예시>
result
.then((jwt: string) => {
response.status(200);
response.send(jwt);
})
.catch((err: Error) => {
response.status(400);
response.send(err.message);
})
})
자바스크립트에 대한 문법 지식이 전무한 상태에서 첫 날부터 프로미스를 맞이하고 그 프로미스가 한 파일이 아닌 여러 파일에 엮여 있어 이를 보는 데 정말 많은 애를 먹었다.
변명일 수 있지만, 위코드에서 2달 간 Python/Django/RDB를 공부한 나에게 NODE JS/TYPESCRIPT/NO SQL이라는 환경은 적응하기가 정말 어려웠다.
아직도 완벽히 이해를 하고 있는 상태는 아니지만 그래도 첫 날보다는 이해도가 많이 높아진 상태이다.
하나하나 정리 후에는 다음 단계인 async, await를 정리하는 시간을 함께 가져보고 싶다.