disallow using an async function as a Promise executor (no-async-promise-executor)

禁止使用异步函数作为 Promise executor (no-async-promise-executor)

The new Promise constructor accepts an executor function as an argument, which has resolve and reject parameters that can be used to control the state of the created Promise. For example:

new Promise 构造函数接收一个 executor 函数作为参数,该函数具有 resolvereject 两个参数,可用于控制创建的 Promise 的状态。例如:

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

The executor function can also be an async function. However, this is usually a mistake, for a few reasons:

executor 函数也可以是 async function。然而,这通常是一个错误,原因如下:

Rule Details

This rule aims to disallow async Promise executor functions.

此规则旨在禁止使用异步的 Promise executor 函数。

Examples of incorrect code for this rule:

错误 代码示例:

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);
});

Examples of correct code for this rule:

正确 代码示例:

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

const result = Promise.resolve(foo);

When Not To Use It

If your codebase doesn’t support async function syntax, there’s no need to enable this rule.

如果你的代码库不支持异步函数语法,则不需要启用此规则。

Version

This rule was introduced in ESLint 5.3.0.

该规则在 ESLint 5.3.0 中被引入。

Resources