Writing or using functions or methods in your code that are executed one after the other gets you a long way in your applications.
Sometimes, those functions are simple synchronous steps:
console.log('Starting calculation...'); var result = 5 + 4; console.log('The result is', result);
Often, callbacks are used when operations are executed in the background and jump back into our code's control flow asynchronously at a later point in time:
console.log('Starting calculation...'); startExpensiveCalculation(5, 4, function(err, result) { if (!err) { console.log('The result is', result); } });
If those asynchronous background operations bring forth a more complex callback behaviour, they might be implemented as an event emitter:
console.log('Starting calculation...'); calculation...