[JS] Promise

이동주·2022년 3월 30일

JavaScript

목록 보기
7/11

Promise 란??

콜백함수를 사용하다 보면 원하지 않게 콜백지옥을 경험 할 때가 있습니다. 로직을 따라 콜백함수를 계속 작성하다 보면 가독성이 심하게 떨어지는 코드를 작성하게 됩니다. 이럴때 사용하는 것이 Promise 객체 입니다. Promise는 요청에 대해 응답이 준비되었을 때 알림을 주는 알람 서비스 같은 역할 입니다.

// 보통 콜백함수

function work(sec, callback) {
    setTimeout(() => {
        callback(new Date().toISOString());
    }, sec * 1000);
}

work(1, (result) => {
    console.log("첫 번째 작업 : ", result);
    work(1, (result) => {
        console.log("두 번째 작업 : ", result);
        work(1, (result) => {
            console.log("세 번째 작업 : ", result);
        });
    });
});

위에 있는 코드처럼 동기적 처리를 하기 위해서 콜백함수를 사용하다 보면 콜백지옥으로 들어 갈수 있습니다. 하지만 Promise를 사용하면 보다 쉽게 동기적 처리를 할 수 있습니다.

// Promise 사용

function workP(sec) {
  	// Promise의 인스턴스를 반환
  	// then에서 반환한 것을 받는다.
    return new Promise(((resolve, reject) => {
      	// Promise 생성시 넘기는 callback = resolve, reject
      	// resolve 동작 완료시 호출, 오류 났을 경우 reject
        setTimeout(() => {
            resolve(new Date().toISOString());
        }, sec * 1000);
    }))
}

workP(1).then((result) => {
    console.log("첫 번째 작업 : ", result);
    return workP(1);
}).then((result) => {
    console.log("두 번째 작업 : ", result);
    return workP(1);
}).then((result) => {
    console.log("세 번째 작업 : ", result);
    return workP(1);
})

위 코드처럼 Promise 객체를 이용해서 바로 콜백함수를 사용하지 않고 then을 이용하면 순차적으로 코드를 작성 할 수 있기 때문에 가독성이 조금더 좋은 코드를 작성할 수 있습니다.

예외 처리

function wait(sec) {
    return new Promise(((resolve, reject) => {
        setTimeout(() => {
          // 예외발생
            reject('error..!');
        }, sec * 1000);
    }));
}

// 예외처리
wait(3).catch(e => {
    console.log('1st catch ', e);
});

// then을 사용할 시 예외처리
wait(3).then(() => {
	console.log("Success");
}, e => {
	console.log("Catch in Then ", e);
});

읽어보면 좋은 곳

https://joshua1988.github.io/web-development/javascript/promise-for-beginners/

profile
생각나는대로 쓰는 개발 블로그

0개의 댓글