跳至內容

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

此規則預設為開啟。

此規則的作用

禁止使用 async 函數作為 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。然而,這通常是個錯誤,原因有幾個:

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

參考資料

以 MIT 授權釋出。