# no-async-promise-executor
禁止使用异步函数作为 Promise 执行器
配置文件中的 "extends": "eslint:recommended" 属性启用了该规则
new Promise
构造函数接受一个执行器函数作为参数,该函数具有 resolve
和 reject
参数,可用于控制创建的 Promise 的状态。例如:
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
,这通常表明实际上不需要使用new Promise
构造函数,或者可以缩小new Promise
构造函数的范围。
# 规则详情
此规则旨在禁止异步 Promise 执行器功能。
此规则的错误代码示例:
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);
});
此规则的正确代码示例:
const foo = new Promise((resolve, reject) => {
readFile('foo.txt', function(err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
const result = Promise.resolve(foo);
# 何时不使用
如果您的代码库不支持异步函数语法,则无需启用此规则。