版本

no-async-promise-executor

禁止使用 async 函式作為 Promise 執行器

建議

設定檔中使用來自 @eslint/jsrecommended 設定會啟用此規則

new Promise 建構子接受一個執行器函式作為參數,該函式具有 resolvereject 參數,可用於控制所建立 Promise 的狀態。例如

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

執行器函式也可以是 async function。但是,這通常是一個錯誤,原因如下

  • 如果 async 執行器函式拋出錯誤,該錯誤將會遺失,並且不會導致新建立的 Promise 拒絕。這可能會使偵錯和處理某些錯誤變得困難。
  • 如果 Promise 執行器函式正在使用 await,這通常表示實際上沒有必要使用 new Promise 建構子,或者可以減少 new Promise 建構子的範圍。

規則詳情

此規則旨在禁止 async Promise 執行器函式。

此規則的不正確程式碼範例

在遊樂場中開啟
/*eslint no-async-promise-executor: "error"*/

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

此規則的正確程式碼範例

在遊樂場中開啟
/*eslint no-async-promise-executor: "error"*/

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

const result = Promise.resolve(foo);

何時不使用它

如果您的程式碼庫不支援 async function 語法,則無需啟用此規則。

版本

此規則在 ESLint v5.3.0 中引入。

資源

變更語言