美文网首页
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种方法

相关文章

  • ES6 promise理解

    一、promise 是什么 1、Promise 是 JS 中解决异步编程的一种方案。 拓展:js中解决异步编程的...

  • 深入了解下Promise

    Promise 意义 Promise 的诞生与 Javascript 中异步编程息息相关,js 中异步编程主要指 ...

  • 你真的懂异步编程吗?

    为什么要学习异步编程? 在JS 代码中,异步无处不在,Ajax通信,Node中的文件读写等等等,只有搞清楚异步编程...

  • JS异步编程(3)-Promise

    Promise 是 JS 异步编程中的重要概念,异步抽象处理对象,是目前比较流行的异步编程解决方案之一。主要解决了...

  • 1-1作业参考答案

    模块一:函数式编程与 JS 异步编程、手写 Promise参考答案 简答题 一、谈谈你是如何理解 JS 异步编程的...

  • JS中的异步编程

    前言 编程语言很多的新概念都是为了更好的解决老问题而提出来的。这篇博客就是一步步分析异步编程解决方案的问题以及后续...

  • js中的异步编程

    为什么要异步编程?1、js的单线程2、避免UI渲染和ajax请求造成页面停滞状态3、更好的利用资源 异步编程的主要...

  • js 中的异步编程

    一、js 中异步编程的四种方式 1.回调函数 优点:简单、容易理解和部署 缺点:不利于代码的阅读和维护,各个部分之...

  • js 中的异步编程

    参考自:http://www.ruanyifeng.com/blog/2012/12/asynchronous%E...

  • JS中的异步编程

    JS中的同步编程和异步编程 同步编程:任务是按照顺序依次处理,当前这件事没有彻底做完,下一件事是执行不了的 异步编...

网友评论

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

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