[javascript] 프로미스를 사용한 중첩된 비동기 작업 처리 방법

비동기 작업을 처리할 때 중첩된 요청 또는 다른 비동기 작업들을 연속적으로 처리해야하는 경우가 있습니다. 이런 경우에 프로미스를 사용하여 코드를 단순하게 유지하고 가독성을 높일 수 있습니다. 자바스크립트에서는 프로미스를 사용하여 비동기 작업을 좀 더 효율적으로 처리할 수 있습니다.

프로미스란?

프로미스(Promise)는 자바스크립트에서 비동기 작업의 최종 결과를 나타내는 객체입니다. 프로미스는 작업을 완료하기 전에는 알 수 없는 값으로 시작되고, 작업이 완료되면 결과 값을 가지게 됩니다. 프로미스는 세 가지 상태를 가질 수 있습니다: 대기(pending), 이행(fulfilled), 거부(rejected).

프로미스의 중첩된 처리 방법

중첩된 비동기 작업을 처리하는 가장 일반적인 방법은 프로미스 체인을 사용하는 것입니다. 프로미스 체인은 각각의 비동기 작업이 순차적으로 수행되도록 보장합니다. 각 작업은 이전 작업이 완료되면 실행되며, 작업이 성공하면 다음 작업이 실행되고 실패하면 바로 거부됩니다.

다음은 프로미스 체인을 사용하여 중첩된 비동기 작업을 처리하는 예제입니다:

function doAsyncTask() {
  return new Promise((resolve, reject) => {
    // 비동기 작업 수행
    setTimeout(() => resolve('Task 1'), 3000);
  });
}

function doAnotherAsyncTask(previousResult) {
  return new Promise((resolve, reject) => {
    // 이전 작업의 결과를 활용한 비동기 작업 수행
    setTimeout(() => resolve(previousResult + ' Task 2'), 2000);
  });
}

doAsyncTask()
  .then(result => doAnotherAsyncTask(result))
  .then(finalResult => {
    console.log(finalResult); // 'Task 1 Task 2'
  })
  .catch(error => {
    console.error(error);
  });

위의 예제에서 doAsyncTask 함수는 3초 후에 완료되는 비동기 작업을 수행하고, doAnotherAsyncTask 함수는 2초 후에 완료되며 이전 작업의 결과를 이용하여 작업을 진행합니다. 프로미스 객체의 then 메소드를 사용하여 각 작업을 연결하고, catch 메소드를 사용하여 오류 처리를 합니다.

결론

프로미스를 사용하여 중첩된 비동기 작업을 처리하는 것은 자바스크립트 코드의 가독성을 향상시키고 유지보수를 용이하게 만드는 좋은 방법입니다. 프로미스 체인을 통해 각 작업을 순서대로 처리할 수 있으며, 각 작업의 결과를 쉽게 활용할 수 있습니다.