Disallow using an async function as a Promise executor ✅ Recommended The "extends": "eslint:recommended" property in a configuration file enables this rule Table of Contents- Rule Details
- When Not To Use It
- Version
- Resources
The new Promise constructor accepts an executor function as an argument, which has resolve and reject parameters that can be used to control the state of the created Promise. For example: const result = new Promise(function executor(resolve, reject) { readFile('foo.txt', function(err, result) { if (err) { reject(err); } else { resolve(result); } }); });
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 the new Promise constructor, or the scope of the new Promise constructor can be reduced.
Rule DetailsThis rule aims to disallow async Promise executor functions. Examples of incorrect code for this rule: const foo = new Promise(async (resolve, reject) => { readFile('foo.txt', function(err, result) { if (err) { reject(err); } else { resolve(result); } }); });
const result = new Promise(async (resolve, reject) => { resolve(await foo); });
Examples of correct
code for this rule: const foo = new Promise((resolve, reject) => { readFile('foo.txt', function(err, result) { if (err) { reject(err); } else { resolve(result); } }); });
const result = Promise.resolve(foo);
When Not To Use ItIf your codebase doesn’t support async function syntax, there’s no need to enable this rule. VersionThis rule was introduced in ESLint v5.3.0. Resources |