[TIL] JAVASCRIPT - PROMISE

SooHyung Kim·2020년 6월 14일
0

Javascript

목록 보기
1/1
  • 기업 협업 후 정신 없이 밀려드는 새로운 기술들, 기술 세미나 준비 등으로 어느 덧 마지막 주를 앞두고 있다. 그 동안 정리하지 못한 기술들을 정리하고자 한다!

그 첫번째 주자는 첫 날부터 지금까지 나를 너무나도 힘들게 하는 Promise..

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를 통해 프로미스를 풀어줄 수 있도록 한다.

    • 아래 예시는 정상적 작업 완료에는 jwt를 배출하고, 에러가 발생할 경우 에러메시지를 발생시키고 있다.
<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를 정리하는 시간을 함께 가져보고 싶다.

profile
Slow and steady win the race

0개의 댓글