| The way I see it, there are two types of callbacks - synchronous and asynchronous. This is a synchronous callback (but callback nonetheless), that takes an array of numbers, and adds its entries: arr.reduce(function(acc, item){
return acc + item;
}); There's some boilerplate in this, so as per latest JS specs, you can remove all that and rewrite it as: arr.reduce( (x, y) => x + y); Then there's asynchronous callback. Most of "callback-hell" stems from these type of callbacks, because you would do "do-this-then-do-this-then-the-other-thing", and nest these one within other. We realized that callback-hell prevents us from using return or handle errors in a clean & reliable way, so we went to promises. Then promises turned out to be quite a pain too. Then generators, and now we have settled for async-await. But in no way that "hell" is acceptable! |