Skip to content

noAsyncPromiseExecutor (since v1.0.0)

Diagnostic Category: lint/suspicious/noAsyncPromiseExecutor

Sources:

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. 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. 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.
new Promise(async function foo(resolve, reject) {})
suspicious/noAsyncPromiseExecutor.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) => {})
suspicious/noAsyncPromiseExecutor.js:1:15 lint/suspicious/noAsyncPromiseExecutor ━━━━━━━━━━━━━━━━━━━

   Promise executor functions should not be `async`.
  
  > 1 │   new Promise(async (resolve, reject) => {})
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    2 │ 
  
new Promise(((((async () => {})))))
suspicious/noAsyncPromiseExecutor.js:1:19 lint/suspicious/noAsyncPromiseExecutor ━━━━━━━━━━━━━━━━━━━

   Promise executor functions should not be `async`.
  
  > 1 │   new Promise(((((async () => {})))))
                     ^^^^^^^^^^^^^^
    2 │ 
  
new Promise((resolve, reject) => {})
new Promise((resolve, reject) => {}, async function unrelated() {})
new Foo(async (resolve, reject) => {})
new Foo((( (resolve, reject) => {} )))