eslint/no-async-promise-executor 正確性
此規則的作用
禁止使用 async 函數作為 Promise 的執行器
為什麼這樣不好?
new Promise
建構子接受一個執行器函數作為參數,該函數具有 resolve
和 reject
參數,可用於控制所建立 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
建構子的範圍。