noAsyncPromiseExecutor
Diagnostic Category: lint/suspicious/noAsyncPromiseExecutor
Since: v1.0.0
Sources:
- Same as:
no-async-promise-executor
Description
Section titled DescriptionDisallows 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:
- 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. - If a Promise executor function is using
await
, this is usually a sign that it is not actually necessary to use thenew Promise
constructor, or the scope of thenew Promise
constructor can be reduced.
Examples
Section titled ExamplesInvalid
Section titled Invalidnew 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
Section titled Valid new Promise((resolve, reject) => {}) new Promise((resolve, reject) => {}, async function unrelated() {}) new Foo(async (resolve, reject) => {}) new Foo((( (resolve, reject) => {} )))
How to configure
Section titled How to configure{ "linter": { "rules": { "suspicious": { "noAsyncPromiseExecutor": "error" } } }}