If you used JavaScript before Promise was introduced (over ten years ago now!), you will have seen code like this:
fetchUserId(5, (err, userId) => {
if (err) return console.error(err);
loadAccountBalance(userId, (err, balance) => {
if (err) return console.error(err);
formatBalanceMessage(balance, (err, message) => {
if (err) return console.error(err);
console.log(message);
});
});
});
This is what we call “callback hell”. The intent is identical to the much simpler version: