-
Notifications
You must be signed in to change notification settings - Fork 0
Description
var time = '2016/05/31';主要是看到了RN中的fetch的具体实现,看到了promise的实践,才有本文,先看的Promise/A+,后面有时间会补上A+中对A的扩展。
原文:http://wiki.commonjs.org/wiki/Promises/A ,翻译自娱,有问题请指正
一个promise对象代表一个单一操作完成后的返回结果,其可能所处的状态为:unfulfilled,fulfilled, failed.
他只会从unfulfilled状态到fulfilled状态,或是unfulfilled状态到failed状态。
一旦fulfilled或是failed的状态确定,promise的值就不能更改了。
仅仅作为一个js的原始值,以及拥有一个对象的身份。
不可变更对于promise来说是一个非常重要的特质,它可以避免来自那些可以在表现中创建意料之外的改动,又或是能将promise传递到其他函数中又不至于影响到调用者的监听者的负面影响,毕竟作为原始值,我们无需担心。
这份Api不会定义一个promise对象如何创建,这里仅仅只会定义promise对象需要提供给使用者与它互动的必要接口。
使用者可以按规范来自由定义和实现promise,有一些promise对象可能会提供他们自己的方法来完成/满足(fulfill)promise,其他的promise可能会利用一些其他不对使用者可见的组件完成。
看一下[promise manager]Api来寻求一些实用方便的方法。
promise自己也能包含一些外部实用方便的方法,举个栗子,一个使用者可以通过promise实现Dojo的Deferred功能。
一个promise是作为一个对象被定义的,他还有个函数属性方法:then
then(fulfilledHandler, errorHandler, progressHandler)
为promise的状态而添加了fulfilledHandler,errorHandler,progressHandler。
fulfilledHandler处理函数在promise处于fulfilled状态时被调用。
errorHandler处理函数在promise处于failed状态时被调用。
progressHandler处理函数在promise的过程事件中调用。
所有的参数都是可选的,非函数的参数会诶忽略。
progressHandler处理函数不仅仅是一个可选参数,他的过程事件都是完全可选。promise实现者从来都不被要求调用ProgressHandler,这个参数存在是为了给实现者在存在过程事件时调用它来作为记录。
then方法应该在处理完当前promise对象状态后返回一个新的被(实现/完成)了的promise对象,这样就允许了promise能够以链式的方式来操作了。回调函数返回的值作为新promise完成态的值,如果回调抛出了一条error,新的promise对象会转为failed状态。
一条遵从Commons规范实现的promise:
>asyncComputeTheAnswerToEverything().
then(addTwo).
then(printResult, onError);
44一个具备交互性功能的promise是一个扩展的promise实现,它支持如下额外的函数:
get(propertyName)
要求属性来自promise的目标对象。返回一个提供promise目标对象状态属性的promise对象
call(functionName, arg1, arg2, ...)
要求在promise目标对象上调用所给的方法。返回一个提供被要求调用方法的结果值的promise对象