1.什么是异步
如我们知道的那样,JS是单线程的,如果有一些事情处理起来很耗时,但我们又需要它的处理结果处理后续的事,所以我们就等啊等,这时就阻塞了,我们别的啥都不能做,连界面也卡住,异步给我们提供了一种可能,就是我们不必傻等,可以先做别的事情,等它处理完了我们在接着做
简单说异步就是做一些在未来才有结果的事情,严格来说异步是宿主环境(比如浏览器)给我们提供的,并不是JS引擎提供的,比如你做一个Ajax请求,我们只需要告诉浏览器一个回调,浏览器会监听这个请求,在请求成功响应后把结果告诉回调函数并把回调函数推到任务队列里
JS引擎只是一直执行代码,主线程里的代码执行完了就从任务队列里面捞任务继续执行,然后更新UI, 然后又查看主线程的代码运行…周而复始的运行
2.异步编程(callback)
3.异步编程(Promise)
解决了callback的两个缺陷:
1.“回调地狱”,代码可读性差,不利于调试追踪代码
2.回调的不可信任问题
4.异步编程(生成器+Promise)
利用生成器的特性实现以同步的方式编写异步代码
5.异步编程(async/await+Promise)
生成器+Promise 的官方支持(ES7)