ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바스크립트 프라미스
    자바스크립트,제이쿼리 2019. 10. 16. 00:28

    프라미스는 콜백의 단점을 해결하려는 시도 속에서 만들어졌습니다. 프라미스가 콜백을 대체하는것은 아닙니다. 사실 프라미스에서도 콜백을 사용합니다. 프라미스는 콜백을 예측 가능한 패턴으로 사용할 수 있게 하며 프라미스 없이 콜백만 사용했을 때 나타날 수 있는 엉뚱한 현상이나 찾기 힘든 버그를 상당수 해결합니다.

     

    프라미스의 기본 개념은 간단합니다. 프라미스 기반 비동기적 함수를 호출하면 그 함수는 Promise 인스턴스를 반환합니다. 프라미스는 성공(fulfiled)하거나, 실패(rejected)합니다. 프라미스가 성공하거나 실패하면 그 프라미스를 결정(settled)됐다고 합니다. 프라미스는 객체이므로 어디든 전달할 수 있다는 점도 콜백에 비해 간편한 장점입니다. 비동기적 처리를 여기서 하지 않고 다른 함수에서 처리하게 하고 싶다면 프라미스를 넘기기만 하면 됩니다. 마치 음식점에서 받은 예약 호출기를 친구에게 맡기는 것과 비슷합니다. 예약한 인원이 때맞춰 오기만 한다면, 음식점에서는 누가 호출기를 들고 있든 상관없으니까요.

     

    프라미스 만들기

    resolve(성공)와 reject(실패) 콜백이 있는 함수로 새 Promise 인스턴스를 만들어봅시다. 매개변수를 받게 만들어서 카운트다운에 메이지 않게 하고, 카운트다운이 끝나면 프라미스를 반환하게 합시다.

        function countdown(seconds) {
            return new Promise(function(resolve, reject) {
                for(var i=seconds; i>=0; i--) {
                    setTimeout(function() {
                        if(i>0) console.log(i + "...");
                        else resolve(console.log("GO!"));
                        }, (second-i)*1000);
                }
            });
        }

    resolve와 reject는 함수입니다. resolve를 여러 번 호출하면 프라미스의 프라미스 같은 걸 만들 수 있지 않을까 하는 생각이 들 수도 있겠지만, resolve나 reject를 여러번 호출하든, 섞어서 호출하든 결과는 같습니다. 첫 번째로 호출한 것만 의미가 있습니다. 프라미스는 성공 또는 실패를 나타낼 뿐입니다.(위 코드는 실패 부분이 없습니다.!)

    '자바스크립트,제이쿼리' 카테고리의 다른 글

    Handlebars  (0) 2019.10.23
    자바스크립트 프로토타입  (0) 2019.10.18
    자바스크립트 콜백  (0) 2019.10.15
    자바스크립트 스코프  (0) 2019.10.13
    자바스크립트 객체  (0) 2019.10.07
Designed by Tistory.