这篇文章将为大家详细讲解有关javascript异步编程方法是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
javascript实现异步编程的方法有:易于理解和实现但是代码不好维护的回调方法,发布/订阅方法,易于理解并且可绑定多个事件但是工作流程混乱的事件监听方法,承诺方法
异步模式是非常重要,在浏览器端长时间运行的操作应该异步执行,以避免不响应。
大家都知道javascript的执行环境是单线程的,单线程就意味着在任何时候都只能运行一个任务。如果遇到多任务的时候就需要在队列中等待上一任务的完成。因此耗费时间比较多,同步模式就类似于这种单线程模式,异步模式是完全不同的,每一个任务都有一个回调函数,当一个任务完成后,它将执行回调函数,后面的任务可以与前一个任务同时运行。任务的执行顺序与队列中的任务序列不同。
<强>方法一:回调方法强>
这个方法是异步编程的基本方法,假设有两个函数f1和f2,后者将等待第一个函数的结果。
f1 (); F2 ();
如果f1是长时间运行的操作,则可以重写f1并将F2作为f1的回调函数。
函数f1(回调){ setTimeout(函数(){ 回调(); },1000); }
使用此模式,同步操作就可以转换为异步操作,f1不会阻止程序执行,它会将先执行主逻辑然后再执行耗时的操作
回调函数的优点是易于理解和实现,缺点是代码不可读和可维护,不同的组件高度耦合,工作流非常混乱,每个任务只能有一个回调函数。
<强>方法二:发布/订阅强>
此事件可以理解为信号,假设存在信号中心,如果一个任务完成,它将向信号中心发布信号,其他任务可以从订阅信号中心接收指定信号。这种方法就称为发布/订阅模式或者是观察者模式。
例:f2向信号中心订阅完成信号
jQuery.subscribe(“完成”,f2);
然后写f1为
函数f1 () { setTimeout(函数(){ jQuery.publish (“done"); },1000); }
<代码> jQuery。发布(“完成”)代码>表示当f1完成执行时它将向信号中心发送一个完成信号,然后f2将开始执行。
当f2完成执行时,它可以取消订阅。
jQuery.unsubscribe(“完成”,f2);
<强>方法三:事件监听强>
另一种方法是事件驱动模式,一个任务的执行不依赖于代码顺序,它们等待一个事件发生。在本例中仍然使用f1和f2,首先将一个事件绑定到f1。
f1.on(& # 39;完成# 39;,f2);
上述代码的含义是如果f1完成事件发生,则执行f2。
函数f1 () { setTimeout(函数(){ f1.trigger(& # 39;完成# 39;); },1000); }
<代码> f1.trigger(& # 39;完成# 39;)代码>表示它将触发做的事件,然后在执行完成时执行f2。
优点是它易于理解并且可以绑定多个事件,每个事件都可以具有许多回调函数,并且它可以解耦哪个有利于模块化。缺点是整个程序将被事件驱动,工作流程不是很清楚。
<强>方法四:承诺方法强>
承诺对象是CommonJS提出的标准,目的是为异步编程提供通用接口。每个异步任务都会返回一个承诺对象,这个对象有一个允许设置回调函数的那方法,例如,f1的回调函数f2:
f1 ()。然后(F2)
f1应写成:
函数f1 () { var过程=$ .Deferred (); setTimeout(函数(){ dfd.resolve (); },500); 返回dfd.promise; }
优点是回调函数是链接的,程序的工作流程非常清晰,它有一套完整的链接方法,可用于实现强大的功能。
例如,设置多个回调函数:
f1 () (f2) (f3);
还有一个例子,如果有错误:
f1 () (f2) . fail (f3);
其他三种方法不具备的一个优点是一旦完成一个任务,如果添加更多的回调函数,它们将立即执行。缺点是它不容易理解。
关于javascript异步编程方法是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。