프로미스

프로미스

보통

소개

Promise 클래스가 등장하기 전에는 비동기 코드를 다루는 방법이 하나뿐이었어요. 바로 _콜백 패턴_이에요.

콜백은 다른 함수에 인자로 전달되고, 그 함수에서 어떤 작업이 끝나면 호출되는 함수예요. 이런 콜백 함수에서는 첫 번째 매개변수로 오류를 받는 방식이 흔해요 (아래 예제를 봐요).

function callback(error, arg2, arg3) {}

이게 비동기 코드와 어떻게 관련이 있을까요?

예전부터 콜백은 비동기 작업이 끝난 뒤 프로그램 전체를 막지 않고 어떤 작업을 할 수 있도록 하기 위해 사용됐어요.

fetchProduct(productId, function (error, data) {
  if (error) {
    // Handle the error
  } else {
    // Do some work
  }
});

위 예제에서 fetchProduct 함수는 비동기 함수인데, 두 번째 인자로 콜백을 받아요. 이 콜백은 상품 데이터를 가져온 뒤 무엇을 할지 결정해요.

지침

이 연습 문제의 목표는 두 가지예요:

  1. "콜백 패턴"을 사용하는 함수를 Promise를 반환하는 함수로 바꿔 주는 promisify 함수를 구현해요. 아래 예제를 봐요.
function fetchProduct(productId, function(error, data) {
    if (error) {
        // Handle the error
    } else {
        // Make something with your data
    }
})

const fetchProductAsPromise = promisify(fetchProduct);

// Now you got a function `fetchProductAsPromise`
// that returns a promise
fetchProductAsPromise(productId)
    .then((data) => {})
    .catch((error) => {});
  1. 다음 Promise 내장 메서드들을 직접 사용하지 않고 다시 구현해요.
  • all: 프로미스를 담은 배열을 받아서 모두 이행되면 이행하고, 하나 라도 거부되면 거부해요.
  • allSettled: 프로미스를 담은 배열을 받아서 모두 이행되거나 거부되면 이행해요.
  • race: 프로미스를 담은 배열을 받아서 가장 먼저 이행되거나 거부된 프로미스의 값으로 이행하거나 거부해요.
  • any: 프로미스를 담은 배열을 받아서 하나 가 이행되면 이행하고, 모두 거부되면 거부해요.
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
JavaScript Exercism

프로미스 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 JavaScript 트랙을 개념 37개연습 문제 159개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.