서론

    Promise는 JavaScript의 비동기 프로그래밍을 도와주는 라이브러리다.
    현재는 JavaScript V8엔진에 기본 탑재되어 있다. (즉 Node.js에서도 활용할 수 있다.)

    IE10 이전 버전에서는 작동하지 않는데 Babel과 Promise polyfill을 통해 비슷하게 작동하도록 만들 수 있다.

     

    본론

    그렇다면 어떻게 Promise가 비동기 작동을 돕는걸까?
    간단한 Wait 함수를 살펴보자.

    const wait = (time: number): Promise<void> => new Promise((resolve, reject) => {
      setTimeout(() => resolve(), time);
    });
    
    wait(4000).then(() => console.log("done"))

    이 코드를 실행한다면 4초 후 Promise 객체의 resolve 함수가 실행되며 .then() 절로 넘어가 done 가 출력된다.

    Promise 객체의 resolve 함수는 함수가 정상적으로 실행되었음을 의미한다. 여기에 변수를 담을 수 있다.
    reject 함수는 에러가 발생했음을 의미한다. 마찬가지로 변수를 담을 수 있다.

    import fs from 'fs'
    
    const openFile = (file: string) => new Promise((resolve, reject) => {
      fs.readFile(file, (err, data) => {
        if(err) reject(err);
        resolve(data);
      });
    });
    openFile('location')
      .catch((err) => console.log(err))
      .then((data) => console.log(data));

    다음과 같이 사용할 수 있다.

    결론

    Promise는 callback hell을 조금이나마 완화할 수 있는 문법이다.

    하지만 여전히 callback hell을 유발할 가능성이 남아있다.

    다음 게시글에서 이를 완전히 해결한 async/await 문법에 대해 알아보겠다.

    'TypeScript' 카테고리의 다른 글

    async/await 문법?? 먹는건가요?  (0) 2024.05.22
    Posted by dalbodeule