Skip to content
← Back to rules

eslint/no-async-promise-executor 정확성

This rule is turned on by default.

작동 방식

Promise 실행자로 비동기 함수 사용을 금지합니다.

왜 문제가 될까요?

new Promise 생성자는 실행자 함수를 인수로 받아들입니다. 이 실행자 함수는 resolvereject 매개변수를 가지며, 생성된 Promise의 상태를 제어할 수 있습니다. 예를 들어:

javascript
const result = new Promise(function executor(resolve, reject) {
  readFile("foo.txt", function (err, result) {
    if (err) {
      reject(err);
    } else {
      resolve(result);
    }
  });
});

실행자 함수는 async function 일 수도 있지만, 이는 일반적으로 오류이며 다음과 같은 이유 때문입니다:

  • 비동기 실행자 함수가 오류를 던질 경우, 해당 오류는 사라지고 새로 생성된 Promise가 거부되지 않습니다. 이로 인해 일부 오류를 디버그하거나 처리하기 어려워질 수 있습니다.
  • Promise 실행자 함수에서 await를 사용하는 것은 보통 새로운 Promise 생성자 사용이 실제로 필요하지 않거나, 새로운 Promise 생성자의 범위를 줄일 수 있음을 시사합니다.

예시

이 규칙에 잘못된 코드 예시:

javascript
const foo = new Promise(async (resolve, reject) => {
  readFile("foo.txt", function (err, result) {
    if (err) {
      reject(err);
    } else {
      resolve(result);
    }
  });
});

const result = new Promise(async (resolve, reject) => {
  resolve(await foo);
});

이 규칙에 올바른 코드 예시:

javascript
const foo = new Promise((resolve, reject) => {
  readFile("foo.txt", function (err, result) {
    if (err) {
      reject(err);
    } else {
      resolve(result);
    }
  });
});

const result = Promise.resolve(foo);

사용 방법

구성 파일 또는 명령줄 인터페이스에서 이 규칙을 활성화하려면 다음을 사용할 수 있습니다:

json
{
  "rules": {
    "no-async-promise-executor": "error"
  }
}
bash
oxlint --deny no-async-promise-executor

참고 자료