跳至内容

eslint/no-async-promise-executor 正确性

此规则默认开启。

其功能

不允许使用异步函数作为 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,那么这通常表示实际上不需要使用 new Promise 构造函数,或者 new Promise 构造函数的范围可以缩小。

参考

根据 MIT 许可证发布。