no-async-promise-executor
禁止使用 async 函式作為 Promise 執行器
✅ 建議
在設定檔中使用來自 @eslint/js
的 recommended
設定會啟用此規則
new Promise
建構子接受一個執行器函式作為參數,該函式具有 resolve
和 reject
參數,可用於控制所建立 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( (resolve, reject) => {
readFile('foo.txt', function(err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
const result = new Promise( (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 中引入。