A callback is a function supplied to another function so it can be called later. Node's traditional error-first callback convention puts the error first and successful data afterward.
Callbacks are still common in older code, but deeply nested callbacks can become hard to maintain.
Deep dive
Error-first callback pattern
A common Node.js callback looks like (error, result). Always check the error before using the result.
Why callbacks become difficult
Multiple dependent asynchronous operations can create deeply nested code. Promises and async/await help flatten that structure and make error handling easier to follow.