美文网首页
js 中的异步编程

js 中的异步编程

作者: 落叶无声xcm | 来源:发表于2017-02-20 13:18 被阅读21次

    一、js 中异步编程的四种方式

    1.回调函数

    • 优点:简单、容易理解和部署
    • 缺点:不利于代码的阅读和维护,各个部分之间高度耦合,流程会很混乱,而且每个任务只能指定一个回调函数
    function fn1(callback) {
        callback();
    }
    

    2.事件监听

    • 优点:容易理解,可以绑定多个事件,每个事件可以指定多个回调函数,可以去耦合,实现模块化
    • 缺点:整个程序都要变成事件驱动型,运行流程会变得很不清晰(此处感悟不深)
    //采用 jquery 的写法
    function f1(){
       ...
       //发送done事件完成,相当于触发事件
       f1.trigger('done');
    }
    
    //done 为监听的事件名字
    f1.on('done', f2);
    

    3.发布/订阅

    • 优点:可以通过查看"消息中心",了解存在多少信号、每个信号有多少订阅者,从而监控程序的运行
    //采用的是Ben Alman的Tiny Pub/Sub,这是jQuery的一个插件
    
    //f2向"信号中心"jQuery订阅"done"信号
    jQuery.subscribe("done", f2);
    
    function f1(){
       //向"信号中心"jQuery发布"done"信号,从而引发f2的执行
       jQuery.publish("done");
    }
    
    //f2完成执行后,也可以取消订阅(unsubscribe)
    jQuery.unsubscribe("done", f2);
    

    4.Promises对象

    • Promises对象是CommonJS工作组提出的一种规范,目的是为异步编程提供统一接口
    • 每一个异步任务返回一个Promise对象,该对象有一个then方法,允许指定回调函数
    f1().then(f2);
    
    //f1要进行如下改写(这里使用的是jQuery的实现)
    function f1(){
      var dfd = $.Deferred();
      setTimeout(function () {
        // f1的任务代码
        dfd.resolve();
      }, 500);
      return dfd.promise;
    }
    
    • 优点
    • 回调函数变成了链式写法,程序的流程可以看得很清楚,而且有一整套的配套方法,可以实现许多强大的功能。
    • 如果一个任务已经完成,再添加回调函数,该回调函数会立即执行。所以,你不用担心是否错过了某个事件或信号
    • 缺点:编写和理解,都相对比较难
    参考:Javascript异步编程的4种方法

    相关文章

      网友评论

          本文标题:js 中的异步编程

          本文链接:https://www.haomeiwen.com/subject/zqekwttx.html