what is Promise? 1.비동기 처리

zenibako.lee
3 min readOct 14, 2019

--

자바스크립트 프로미스

자바스크립트 공부를 시작하고서부터,

이런 강적은 처음보았다.

https://www.lastcalltrivia.com/famous-riddles/

언뜻알겠는데… 정확히 쓰려고하면 에러가 산더미..

그래서 제대로 처음부터 알아보고자 한다.

그래서 프로미스가 뭔데?

The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value.

-MDN web docs

번역부터도 살짝 버거운 문장이 튀어나왔다.

Promise 객체는 비동기적 연산의 eventual(슈뢰딩거의 고양이같은) 성공 혹은 실패에 대한 완료와 그 결과값을 의미한다.

비동기가 뭔데?

비동기처리

비동기처리는 자바스크립트의 특성과도 맞닿아 있다.

자바스크립트는 싱글스레드 기반 연산을 한다.

그 의미는 동일한 시간에, 한가지 연산밖에 할 수 없다는 것이다.

그렇다면, setTimeout같은 대기, 혹은 Fetch와 같이 외부의 대기시간에 따라 javascript의 operation시간이 같이 늘어난다는 것을 의미한다.

어떻게 하면 싱글스레드의 귀중한 자원인 ‘시간’을 효율적으로 사용할 수 있을까?

그 대기시간동안, 다른 코드실행을 할 수 있도록 하면 어떨까?

개인적인 추론이지만, 그 결과 만들어낸 개념이 ‘비동기처리’라고 생각한다.

https://nodepstory.tistory.com/48

(너는 기다리니? 나는 예약해놓고 밥먹으러간다)

비동기 처리의 단점

그러나 이러한 비동기 처리 방식에는 당연한 단점이 존재한다.

위에서 아래로 코드를 읽어나가는 자바스크립트의 경우,

1.회전목마 대기열을 예약한다
2.밥을 먹는다
3.회전목마를 탄다.

와 같은 코드가 있는 경우,

밥을 먹고 나서,

회전목마의 대기열이 완료가 되었을 것이라는

장담을 할 수 없다는 것이다.

https://giphy.com/gifs/doctor-who-what-tenth-sRb7yNtTJAtZS

따라서,

회전목마의 대기열이 완료가 되었을 시에만,

회전목마 어트랙션으로 향하도록 알림 기능이 필요하다.

이러한 알림기능 설정을 뭐라고 해야할까… 본인은 발견하지 못했다.

비동기 처리의 처리? (`o`)

다음 글에서는 해당 비동기 처리의 처리 방법을 알아보도록 하자!

--

--

zenibako.lee
zenibako.lee

Written by zenibako.lee

backend engineer, JS, Node, AWS

No responses yet