注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

Promise  

2013-11-29 08:29:01|  分类: Javascript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
关于Promise (下面斜体字摘自 http://javascript.ruanyifeng.com/special/asynchronous.html#toc4)

Promises对象是CommonJS工作组提出的一种规范,目的是为异步编程提供统一接口。
简单说,它的思想是,每一个异步任务返回一个Promise对象,该对象有一个then方法,允许指定回调函数。比如,f1的回调函数f2,可以写成:
f1().then(f2);
这种写法对于嵌套的回调函数尤其有用。
// 传统写法
step1(function (value1) {
    step2(value1, function(value2) {
        step3(value2, function(value3) {
            step4(value3, function(value4) {
                // ...
            });
        });
    });
});
// Promises的写法
promiseStep1()
.then(promiseStep2)
.then(promiseStep3)
.then(promiseStep4);

上面代码的promiseStep1函数是对Step1函数的改写,主要区别是返回一个Promise对象,
后面的promiseStep2、promiseStep3和promiseStep4都是如此。

可以看到传统写法使得代码混成一团,变得横向发展而不是向下发展。
Promises规范就是为了解决这个问题而提出的,目标是使用正常的程序流程(同步),
来处理异步操作。它先返回一个Promise对象,后面的操作以同步的方式,
寄存在这个对象上面。等到异步操作有了结果,再执行前期寄放在它上面的其他操作。

------------------------------------分割线----------------------------------------
那么Promise具有哪些特点呢?
  • Promise对象必须处于三种状态其中之一: unfulfilled, resolved, rejected (Can be in one of three states: unfulfilled, resolved, rejected)
  • 状态的改变仅仅可以从unfulfilled到resolved或unfulfilled到rejected(May only change from unfulfilled to resolved or unfulfilled to rejected)
  • 实现一个可以注册回调函数的方法then(Implements a then method for registering callbacks for notification of state change)
  • 回调函数不允许修改promise所产生的value (Callbacks cannot change the value produced by the promise)
  • then方法会返回一个新的promise,提供chain,但不能修改原生promise的值(A promise's then method returns a new promise, to provide chaining while keeping the original promise's value unchanged)


不同框架对Promise规范有不同的实现:


参考资料:
http://dojotoolkit.org/documentation/tutorials/1.8/promises/
  评论这张
 
阅读(221)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017