A callback is a function you pass to another function, which calls it when an asynchronous operation finishes. Node.js core APIs follow the error-first convention. The first argument is an error or null, and the result comes after it.
Callback hell is the deep nesting you get when each step depends on the one before. The error check repeats at every level, which makes the code hard to read and maintain.
// Callback hell example
getData((err, data) => {
if (err) return console.error(err);
processData(data, (err, processed) => {
if (err) return console.error(err);
saveData(processed, (err, result) => {
if (err) return console.error(err);
console.log('Data saved successfully');
});
});
});
The fix is to flatten the chain. Promises and async/await turn it into a straight sequence with one place to handle errors. Splitting each step into a small named function also helps.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓