1.回调函数(callback)
1  | setTimeout(() => {  | 
缺点
回调地狱

不能用try catch捕获错误
不能return
回调地狱的根本问题在于:
- 缺乏顺序性:回调地狱导致调试困难,和大脑的思维方式不符
 - 嵌套函数存在耦合,一旦有所改动,牵一发动全身(控制反转)
 - 嵌套函数过多的话,很难处理错误
 
优点
- 解决了同步的问题
 
2.Promise
Promise就是为了解决callback所产生的问题
Promise实现了链式调用,也就是说每次then后返回的都是一个全新的Promise,如果我们在then中return,return 的结果会被 Promise.resolve() 包装
优点:解决了回调地狱
1  | axios.get(url1)  | 
缺点:无法取消Promise,错误需要通过catch来捕获
3.Generator
可控制函数的执行
1  | function *fetch() {  | 
4.async/await
异步终极解决方案
优点:代码清晰,处理了回调地狱的问题
缺点:await将异步改成同步代码,如果多个异步操作没有依赖性而使用 await 会导致性能上的降低。
1  | async function test() {  | 


