eslint/no-async-promise-executor 정확성
작동 방식
Promise 실행자로 비동기 함수 사용을 금지합니다.
왜 문제가 될까요?
new Promise 생성자는 실행자 함수를 인수로 받아들입니다. 이 실행자 함수는 resolve 및 reject 매개변수를 가지며, 생성된 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