“ When you execute something synchronously, you wait for it to finish before moving on to another task. When you execute something asynchronously, you can move on to another task before it finishes.”
当我们编写异步代码时主要跟两个东西打交道:异步 API 和回调函数。当你的程序只有一个异步调用时,你肯定可以轻松应对。但当你的程序有 N 多个异步调用,并且相互直接有着复杂的关系(多个异步调用同时发出?顺序发出?有一个失败了其它的怎么处理?)时,你的代码将充斥大量的控制变量,你感觉你已经进入了 callback hell 。更恐怖的当有人读你的代码的时候,他会感觉像吃屎一样难受。
这个问题大部分语言都存在,只不过 JS 更受关注,人多嘛,再加上 WEB 程序天生就面对大量异步网络请求。