[비동기 프로그래밍] - Promise Chaning

Donggu(oo)·2022년 12월 17일
0

JavaScript

목록 보기
45/49
post-thumbnail

1. 프로미스 체이닝(Promise Chaning)


  • then을 호출하게 되면 똑같은 Promise를 반환하기 때문에 return된 Promise에 다시 then 호출들을 연결하거나 catch를 호출 할 수 있게 된다. 이걸 Promise Chaning이라고 한다.

  • 프로미스는 프로미스 체이닝을 통해 비동기 처리 결과를 전달받아 후속 처리를 하므로 비동기 처리를 위한 콜백 패턴에서 발생하던 콜백 헬이 발생하지 않는다. 다만 프로미스도 콜백 패턴을 사용하므로 콜백 함수를 사용하지 않는 것은 아니다.

let fetchNumber = new Promise(function (resolve, reject) {
  setTimeout(function () {
    resolve(1)
  }, 1000)
});

fetchNumber
  .then(function (num) {
    return num * 2  // 2
  })
  .then(function (num) {
    return num * 3  // 6
  })
  .then(function (num) {
    return new Promise(function (resolve, reject) {
      setTimeout(function () {
        resolve(num - 1)  // 6 - 1 = 5
      }, 1000)
    })
  })
  .then(function (num) {
    console.log(num)  // 5
  })
function func1() {
    let promiseSomething = new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve('첫 번째')
        }, 2000)
    });
    return promiseSomething;
}

function func2() {
    let promiseSomething = new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve('두 번째')
        }, 3000)
    });
    return promiseSomething;
}


func1()
    .then(function (value) {
        console.log(value);  // func1의 resolve인 '첫 번째'를 2초 뒤 출력하고
        return func2();  // func2를 리턴
    })
    .then(function (value) {  // 여기서 then은 func2이므로
        console.log(value);  // func2의 resolve인 '두 번째'를 func1이 실행되고 3초 뒤 출력
    });

0개의 댓글