Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 조건에 따라 프로미스(Promise)를 해결(Resolve)하거나 거부(Reject)하는 방법

JavaScript에서는 setTimeout() 함수를 활용하여 실제 네트워크 요청을 흉내 내는 함수를 작성할 수 있습니다. setTimeout()은 지정된 시간 간격이 지난 후에 특정 작업을 실행하는 타이머 함수로, 비동기 동작을 시뮬레이션하기에 적합합니다.

이때 작성할 함수는 다음과 같은 동작을 해야 합니다.

  • 요청이 성공적으로 처리되면 프로미스를 해결(resolve)합니다.
  • 요청이 실패하면 프로미스를 거부(reject)합니다.

예제 코드

아래 코드는 두 숫자의 합이 기대값과 일치하는지 확인하고, 그 결과에 따라 프로미스를 해결하거나 거부하는 예제입니다.

const num1 = 45, num2 = 48;
const res = 93;

const expectedSumToBe = (num1, num2, res) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if(num1 + num2 === res){
        resolve('success');
      } else {
        reject('failure');
      }
    }, 3000);
  });
};

expectedSumToBe(num1, num2, res).then((data) => {
  console.log(data);
}).catch((err) => {
  console.log(err);
});

expectedSumToBe(23, 56, 76).then((data) => {
  console.log(data);
}).catch((err) => {
  console.log(err);
});

코드 설명

expectedSumToBe 함수는 새로운 Promise 객체를 생성하여 반환합니다. 프로미스 생성자 안에서 setTimeout()을 사용해 3초(3000밀리초) 후에 조건을 검사하도록 설정했습니다.

  • num1 + num2의 결과가 res와 같으면 resolve('success')가 호출되어 프로미스가 성공 상태가 됩니다.
  • 일치하지 않으면 reject('failure')가 호출되어 프로미스가 실패 상태가 됩니다.

함수 호출부에서는 .then()으로 성공 결과를 받고, .catch()로 실패 결과를 처리합니다. 첫 번째 호출은 45 + 48 = 93으로 조건을 만족하므로 'success'가 출력되고, 두 번째 호출은 23 + 56 = 79로 기대값 76과 일치하지 않으므로 'failure'가 출력됩니다.

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

success
failure

이처럼 setTimeout()Promise를 조합하면 실제 네트워크 지연 상황을 재현하면서, 성공과 실패 케이스를 각각 resolvereject로 처리하는 비동기 로직을 손쉽게 구현할 수 있습니다.