프로미스란?

July 17, 2020

프로미스란?

  • 비동기 작업을 콜백 헬을 벗어나긴 위해 만들어진 Promise 객체
  • Promise를 통해 비동기 작업에 대한 결과값을 Promise 객체인 resolve(성공) / reject(실패)을 받아서 비동기 작업을 계속해서 작업 할 수 있음

왜 프로미스를 사용해야 하나요?

  • 콜백헬을 조금더 직관적이게 다른사람이 보기 쉽게 만들어 줄 수 있다.

  • then() 비동기 통신의 대한 성공값을 Promise 객체로 받아 계속해서 비동기 작업 진행 가능

  • catch() 오류 / 에러를 체크

  • 읽기 좋은 코드

    $.get('example.com/' + userId, function (response) {
        $.post('example.com/' + respose.useId, function (response) {
            // 계속해서 콜백을 호출하므로 한 함수에 수 많은 컨텍스트가 생김
        })
    })
    
    getData(userInfo).then(parseValue).then(auth).then(diaplay)

Promise.all vs Promise.race

  • all()

    • 매개변수로 Promise를 array로 넣어 모든 비동기 통신이 끝나고 결과 값을 모두 리턴

    • 주어진 프로미스 중 하나라도 거부하면 다른 프로미스의 이행 여부에 상관없이 reject()를 반환

      var p1 = Promise.resolve(3)
      var p2 = 1337
      var p3 = new Promise((resolve, reject) => {
          setTimeout(() => {
              resolve('foo')
          }, 100)
      })
      
      Promise.all([p1, p2, p3]).then((values) => {
          console.log(values) // [3, 1337, "foo"]
      })
  • race()

    • all()이랑 사용법은 같은 작동방식의 차이가 있습니다.

    • race() 주어진 Pomise 중에 제일 빨리 완료된 것을 결과값을 리턴한다.

      const promise1 = new Promise((resolve, reject) => {
          setTimeout(resolve, 500, 'one')
      })
      
      const promise2 = new Promise((resolve, reject) => {
          setTimeout(resolve, 100, 'two')
      })
      
      Promise.race([promise1, promise2]).then((value) => {
          console.log(value)
          // Both resolve, but promise2 is faster
      })
      // expected output: "two"

© 2023, Customized by Joon