promise/prefer-await-to-callbacks
Require async/await instead of error-first callbacks
With callbacks, every step has to check err by hand and pass it on. A forgotten check drops the error, and try/catch around the call doesn't catch anything that happens later. With await, errors are thrown and the steps read from top to bottom.
The rule goes by names. It reports:
- a call to a function named
callbackorcb - a function with a last parameter named
callbackorcb - a function passed as the last argument, if its first parameter is named
errorerror
The last case has exceptions: event listeners (on, once, addEventListener, removeEventListener), the array methods map, every, forEach, some, find and filter, and calls inside an await or yield expression.
Configure#
Off by default. To turn it on:
bunfig.toml
[lint.rules]
"promise/prefer-await-to-callbacks" = "error" # or "warn"Examples#
example.js4 problems
function readConfig(path, callbackPrefer async/await to the callback pattern) {
fs.readFile(path, "utf8", (err, text) => {Prefer async/await to the callback pattern
if (err) return callback(err)Prefer async/await to the callback pattern;
callback(null, JSON.parse(text))Prefer async/await to the callback pattern;
});
}example.jsNo problems
import { readFile } from "node:fs/promises";
async function readConfig(path) {
const text = await readFile(path, "utf8");
return JSON.parse(text);
}
server.on("error", err => console.error(err));
failures.forEach(err => console.error(err));
await retry(upload, err => err.code === "ETIMEDOUT");When not to use it#
Leave it off in code that has to offer or use a callback API, such as Express middleware or older Node.js libraries.