Skip to content

noAsyncPromiseExecutor

诊断类别:lint/suspicious/noAsyncPromiseExecutor

¥Diagnostic Category: lint/suspicious/noAsyncPromiseExecutor

自从:v1.0.0

¥Since: v1.0.0

来源:

¥Sources:

禁止使用异步函数作为 Promise 执行器。

¥Disallows using an async function as a Promise executor.

执行器函数也可以是异步函数。但是,这通常是一个错误,原因如下:

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

  1. 如果异步执行器函数抛出错误,错误将丢失,不会导致新构造的 Promise 拒绝。这可能会使调试和处理某些错误变得困难。

    ¥If an async executor function throws an error, the error will be lost and won’t cause the newly-constructed Promise to reject. This could make it difficult to debug and handle some errors.

  2. 如果 Promise 执行器函数正在使用 await,这通常表明实际上没有必要使用 new Promise 构造函数,或者可以缩小 new Promise 构造函数的范围。

    ¥If a Promise executor function is using await, this is usually a sign that it is not actually necessary to use the new Promise constructor, or the scope of the new Promise constructor can be reduced.

¥Examples

¥Invalid

new Promise(async function foo(resolve, reject) {})
code-block.js:1:13 lint/suspicious/noAsyncPromiseExecutor ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Promise executor functions should not be async.

> 1 │ new Promise(async function foo(resolve, reject) {})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 │

new Promise(async (resolve, reject) => {})
code-block.js:1:15 lint/suspicious/noAsyncPromiseExecutor ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Promise executor functions should not be async.

> 1 │ new Promise(async (resolve, reject) => {})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 │

new Promise(((((async () => {})))))
code-block.js:1:19 lint/suspicious/noAsyncPromiseExecutor ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Promise executor functions should not be async.

> 1 │ new Promise(((((async () => {})))))
^^^^^^^^^^^^^^
2 │

¥Valid

new Promise((resolve, reject) => {})
new Promise((resolve, reject) => {}, async function unrelated() {})
new Foo(async (resolve, reject) => {})
new Foo((( (resolve, reject) => {} )))

¥Related links