[javascript] Bluebird를 사용하여 비동기 작업을 취소하는 방법을 알려주세요.

Bluebird는 JavaScript에서 비동기 작업을 다루는 데 유용한 라이브러리입니다. 비동기 작업을 수행하는 동안 종종 작업을 취소해야 하는 경우가 있습니다. Bluebird를 사용하여 이를 어떻게 할 수 있는지 알아보겠습니다.

Bluebird의 Promise 객체 생성

우선 Bluebird의 Promise 객체를 생성해야 합니다.

const Promise = require('bluebird');

비동기 작업 설정 및 취소

이제 비동기 작업을 설정하고 취소하는 방법에 대해 알아보겠습니다.

const promise = new Promise((resolve, reject) => {
  const timeout = setTimeout(() => {
    reject(new Error('작업이 취소되었습니다.'));
  }, 5000);

  // 비동기 작업 수행
  doAsyncTask().then((result) => {
    clearTimeout(timeout);
    resolve(result);
  }).catch((error) => {
    clearTimeout(timeout);
    reject(error);
  });
});

// 작업 취소
promise.cancel(); // Bluebird의 Promise 객체는 기본적으로 이 메서드를 제공하지 않기 때문에 해당 작업을 직접 구현해야 합니다.

Bluebird의 Promise 객체 취소 구현

Bluebird의 Promise 객체는 기본적으로 cancel 메서드를 제공하지 않습니다. 따라서 이 기능을 직접 구현해야 합니다. 아래는 Promise 객체를 생성하고 cancel 메서드를 직접 구현하는 예시입니다.

class CancelablePromise extends Promise {
  constructor(executor) {
    let cancelled = false;

    super((resolve, reject) => {
      executor((value) => {
        if (!cancelled) {
          resolve(value);
        }
      }, (reason) => {
        if (!cancelled) {
          reject(reason);
        }
      });
    });

    this.cancel = () => {
      cancelled = true;
    };
  }
}

이제 Bluebird를 사용하여 비동기 작업을 취소할 수 있는 방법을 알아보았습니다. 오류가 발생할 수 있는 비동기 작업을 안전하게 취소할 수 있게 됩니다.

참고 자료