We have learned that callbacks and higher-order functions are two powerful and flexible JavaScript and TypeScript features. However, the use of callbacks can lead to a maintainability issue known as callback hell.
We are now going to write an example to showcase callback hell. We are going to write three functions with the same behavior.
The first function is named doSomethingAsync. The function takes an array of numbers as one of its arguments and adds a new number to it. The function uses setTimeout to simulate some I/O operation, such as reading from a database, and Math.ramdom to simulate a potential exception, such as a request timeout:
function doSomethingAsync(
arr: number[],
success: (arr: number[]) => void,
error: (e: Error) => void
) {
setTimeout(() => {
try {
let n = Math.ceil(Math.random() * 100 + 1);
if...