几个js异步编程工具的区别
下面给你介绍三种:
方法一 setTimeout
常用于:定时器,动画效果
用法:setTimeout(func|code, delay)
缺点:
setTimeout
的主要问题在于,它并非那么精确。譬如通过setTimeout()设定一个任务在10毫秒后执行,但是在9毫秒之后,有一个任务占用了5毫秒的CPU时间片,再次轮到定时器执行时,时间就已经过期4毫秒 —-《深入浅出Nodejs》
方法二 事件监听
任务的执行不取决于代码的顺序,而取决于某个事件是否发生。
用法:f1.on(‘done’, f2);
优点:比较容易理解,可以绑定多个事件,每个事件可以指定多个回调函数,而且可以”去耦合”,有利于实现模块化。
缺点:整个程序都要变成事件驱动型,运行流程会变得很不清晰。
方法三 回调函数
这是异步编程最基本的方法。
假定有两个函数f1和f2,后者等待前者的执行结果。
f1();
f2();
如果f1是一个很耗时的任务,可以考虑改写f1,把f2写成f1的回调函数。
function f1(callback){
setTimeout(function () {
// f1的任务代码
callback();
}, 1000);
}
执行代码就变成下面这样:
f1(f2);
采用这种方式,我们把同步操作变成了异步操作,f1不会堵塞程序运行,相当于先执行程序的主要逻辑,将耗时的操作推迟执行。
回调函数的优点是简单、容易理解和部署,缺点是不利于代码的阅读和维护,各个部分之间高度耦合(Coupling),流程会很混乱,而且每个任务只能指定一个回调函数。