Javascript异步编程

1.回调函数

假定有两个函数f1和f2,后者等待前者的执行结果。如果f1是一个很耗时的任务,可以考虑把f2写成f1的回调函数。

1   function f1(callback){
2     setTimeout(function () {
3       // f1的任务代码
4       callback();
5     }, 1000);
6   }
7    //执行代码就变成下面这样:
8   f1(f2);

采用这种方式,我们把同步操作变成了异步操作,f1不会堵塞程序运行,相当于先执行程序的主要逻辑,将耗时的操作推迟执行。

回调函数的优点:简单、容易理解、部署

缺点:不利于代码的阅读和维护,各个部分之间高度耦合,流程会很混乱,而且每个任务只能指定一个回调函数。

2.事件驱动

任务的执行不取决于代码的顺序,而取决于某个事件是否发生。 

1  f1.on('done', f2);
 1   function f1(){
 2 
 3     setTimeout(function () {
 4 
 5       // f1的任务代码
 6 
 7       f1.trigger('done');
 8 
 9     }, 1000);
10 
11   }

首先,为f1绑定一个事件。执行完成任务后立即触发done事件,从而开始执行f2。

优点:比较容易理解,可以绑定多个事件,每个事件可以指定多个回调函数,而且可以去耦合,有利于实现模块化。

缺点:整个程序都要变成事件驱动型,运行流程会变得很不清晰。

转载:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html

原文地址:https://www.cnblogs.com/yuyutianxia/p/3258378.html