Rumah > hujung hadapan web > tutorial js > javascript异步编程方法有哪些

javascript异步编程方法有哪些

清浅
Lepaskan: 2019-04-19 13:07:41
asal
3262 orang telah melayarinya

JavaScript实现异步编程的方法有:易于理解和实现但是代码不好维护的回调方法,发布/订阅方法,易于理解并且可绑定多个事件但是工作流程混乱的事件监听方法,Promises方法

异步模式是非常重要,在浏览器端长时间运行的操作应该异步执行,以避免不响应。接下来将在文章中为大家详细介绍JavaScript中异步编程方法的实现,具有一定参考作用,希望对大家有所帮助。

javascript异步编程方法有哪些

【推荐课程:JavaScript教程

大家都知道JavaScript的执行环境是单线程的,单线程就意味着在任何时候都只能运行一个任务。如果遇到多任务的时候就需要在队列中等待上一任务的完成。因此耗费时间比较多,同步模式就类似于这种单线程模式,异步模式是完全不同的,每一个任务都有一个回调函数,当一个任务完成后,它将执行回调函数,后面的任务可以与前一个任务同时运行。任务的执行顺序与队列中的任务序列不同。

方法一:回调方法

这个方法是异步编程的基本方法,假设有两个函数f1和f2,后者将等待第一个函数的结果。

F1(); 
F2();
Salin selepas log masuk

如果f1是长时间运行的操作,则可以重写f1并将f2作为f1的回调函数。

function f1(callback){
setTimeout(function () {
 callback();
    }, 1000);
}
Salin selepas log masuk

使用此模式,同步操作就可以转换为异步操作,f1不会阻止程序执行,它会将先执行主逻辑然后再执行耗时的操作

回调函数的优点是易于理解和实现,缺点是代码不可读和可维护,不同的组件高度耦合,工作流非常混乱,每个任务只能有一个回调函数。

方法二:发布/订阅

此事件可以理解为信号,假设存在信号中心,如果一个任务完成,它将向信号中心发布信号,其他任务可以从订阅信号中心接收指定信号。这种方法就称为发布/订阅模式或者是观察者模式。

例:f2向信号中心订阅完成信号

jQuery.subscribe(“done”,f2);
Salin selepas log masuk

然后写f1为

function f1(){
    setTimeout(function () {
     jQuery.publish("done");
    }, 1000);
}
Salin selepas log masuk

jQuery.publish(“done”)表示当f1完成执行时它将向信号中心发送一个完成信号,然后f2将开始执行。

当f2完成执行时,它可以取消订阅。

jQuery.unsubscribe(“done”,f2);
Salin selepas log masuk

方法三:事件监听

另一种方法是事件驱动模式,一个任务的执行不依赖于代码顺序,它们等待一个事件发生。在本例中仍然使用f1和f2,首先将一个事件绑定到f1。

f1.on('done',f2);
Salin selepas log masuk

上述代码的含义是如果f1完成事件发生,则执行f2。

function f1(){
    setTimeout(function () {
      f1.trigger('done');
    }, 1000);
}
Salin selepas log masuk

f1.trigger('done')表示它将触发done事件,然后在执行完成时执行f2。

优点是它易于理解并且可以绑定多个事件,每个事件都可以具有许多回调函数,并且它可以解耦哪个有利于模块化。缺点是整个程序将被事件驱动,工作流程不是很清楚。

方法四:Promises方法

Promises对象是CommonJS提出的标准,目的是为异步编程提供通用接口。每个异步任务都会返回一个Promises对象,这个对象有一个允许设置回调函数的then方法。例如,f1的回调函数f2:

F1().then(F2)
Salin selepas log masuk

f1应写成:

function f1(){
    var dfd = $.Deferred();
    setTimeout(function () {
        dfd.resolve();
    }, 500);
    return dfd.promise;
}
Salin selepas log masuk

优点是回调函数是链接的,程序的工作流程非常清晰,它有一套完整的链接方法,可用于实现强大的功能。

例如,设置多个回调函数:

f1().then(f2).then(f3);
Salin selepas log masuk

还有一个例子,如果有错误:

f1().then(f2).fail(f3);
Salin selepas log masuk

其他三种方法不具备的一个优点是一旦完成一个任务,如果添加更多的回调函数,它们将立即执行。缺点是它不容易理解。

总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。

Atas ialah kandungan terperinci javascript异步编程方法有哪些. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan