首页 > 编程语言 > 详细

谈谈Javascript异步编程以及新的实现方法--Promise

时间:2014-08-31 22:47:42      阅读:349      评论:0      收藏:0      [点我收藏+]

    最近看到好多文章都在讲promise,为什么现在异步编程会受到如此重视?又为什么异步编程要选择Promise呢?

    先来说说第一个问题,异步编程能受到如此重视很大原因是因为javascript正在逐渐走向标准化、规范化(MVC,模块,OOP),所以一些传统编程领域的一些规范化约束发挥的作用也越来越大了,而且javascript本身就是围绕"异步"来进行的,无论是浏览器端还是node服务器端,大多数的API都是通过"事件"来将请求和返回值分离的。简单来说:javascript受到了重视了,而它本身呢异步编程偏多.

    接下来便是第二个问题,异步编程为什么要选择promise呢?上面说到了"事件",讲到"事件"是一定离不开回调的。而回调呢,作为传统的实现异步编程有三大方法(回调、事件监听、发布/订阅)之一,实现起来是不太利索的,一层层的回调嵌套足够让你陷入"回调地狱",大大降低了程序逻辑的可读性。所以这时候,Promise救世主(先知)出现了,Promise是CommonJS工作组规范制定出来的一种机制,为了给异步编程提供统一的接口,实现规范化的异步编程管理,而且when/then的链式写法让流程清晰明了.它的作用场景主要是用于耗时的场景(在node中问题比较凸显,因为node本身就是异步编程驱动的),比如与后台交互的AJAX、Socket以及局部大量耗时计算时。

    简单介绍之后呢,我们来看看它的工作流程(图):

     bubuko.com,布布扣

    Promise为实例对象,该对象接收一个或者多个参数请求(多个请求时使用when(f1,f2)),最终返回的是一个有限状态机,拥有以下状态:

  • 完成(resolve)
  • 否定(rejected)
  • 等待(pending)

    返回状态后then(onResolve,onReject)对相应的状态做出相应的onXXX回调处理,then(onResolve,onReject)是个链式方法,让使用者分别处理成功失败.

    有一个Deffered对象(到目前为止,我对Deffered的认识还是模模糊糊的)

  • 提供resolve和rejected方法,来完成一个Promise

   最后列出支持Promise的常用框架:jQuery里的$.deferred() AngularJs 里的$q.defer()、dojo里的Promise抽象基类以及服务器端node上的Promise库

   或者可以自己搭建实现一个Promise框架.

谈谈Javascript异步编程以及新的实现方法--Promise

原文:http://www.cnblogs.com/veeking/p/3948256.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!