当线程中没有执行任何同步代码的前提下才会执行异步代码, > [JavaScript:彻底理解同步、异步和事件循环(Event Loop)](https://segmentfault.com/a/1190000004322358) [阮一峰异步编程](http://www.ruanyifeng.com/blog/2015/04/generator.html) ## 异步编程的方法 #### 回调函数 采用这种方式,我们把同步操作变成了异步操作,f1不会堵塞程序运行,相当于先执行程序的主要逻辑,将耗时的操作推迟执行。 回调函数的优点是简单、容易理解和部署,缺点是不利于代码的阅读和维护,各个部分之间高度耦合(Coupling),流程会很混乱,而且每个任务只能指定一个回调函数。 #### 事件监听 任务的执行不取决于代码的顺序,而取决于某个事件是否发生。 #### Promises对象 Promises对象是CommonJS工作组提出的一种规范,目的是为异步编程提供统一接口。 Promises可以简单理解为一个事务,这个事务存在三种状态: 已经完成了 resolved 因为某种原因被中断了 rejected 还在等待上一个事务结束 pending 简单说,它的思想是,每一个异步任务返回一个Promises对象,该对象有一个then方法,允许指定回调函数。 #### generator #### async/await