Null's Blog

Promise A+ 规范

早就听说PromiseA+规范,虽然PromiseA+由PromiseA进化到了+,只不过将PromiseA中的建议变成了标准。

现引用网上一段基本术语表。:

  • 解决(fulfill)或(resolve):指一个 promise 成功时进行的一系列操作,如状态的改变、回调的执行。虽然规范中用 fulfill 来表示解决。
  • 拒绝(reject):指一个 promise 失败时进行的一系列操作。
  • 终值(eventual value):所谓终值,指的是 promise 被解决时传递给解决回调的值,由于 promise 有一次性的特征,因此当这个值被传递时,标志着 promise 等待态的结束,故称之终值,有时也直接简称为值(value)。
  • 据因(reason):也就是拒绝原因,指在 promise 被拒绝时传递给拒绝回调的值。

按照个人理解,then作为promise实现的最重要方法,接受两个参数,可以简单概括为successCallback和errorCallback,其实本人并不认同这个函数,本人更喜欢jQuery里将promise的这个then用.done与.fail和.always表达。本质上来讲,为了Promise的出现是为了告别回调地狱的问题,当然,随便把代码变得“优雅一点”。但本人还是认为jQuery的处理方式更直观,或者说代码结构更加清晰吧。

Promise 的状态

一个 Promise 的当前状态必须为以下三种状态中的一种:等待态(Pending)、执行态(Fulfilled)和拒绝态(Rejected)。

等待态(Pending)

处于等待态时,promise 需满足以下条件:

  • 可以迁移至执行态或拒绝态

执行态(Fulfilled)

处于执行态时,promise 需满足以下条件:

  • 不能迁移至其他任何状态
  • 必须拥有一个不可变的终值

拒绝态(Rejected)

处于拒绝态时,promise 需满足以下条件:

  • 不能迁移至其他任何状态
  • 必须拥有一个不可变的据因

这里的不可变指的是恒等(即可用 === 判断相等),而不是意味着更深层次的不可变(译者注:盖指当 value 或 reason 不是基本值时,只要求其引用地址相等,但属性值可被更改)。

Then 方法

一个 promise 必须提供一个 then 方法以访问其当前值、终值和据因。
promise 的 then 方法接受两个参数:

1
2
//两者都是可选参数
promise.then(onFulfilled, onRejected);

基本上,Promise/a+ 的主要规范点就表述清楚了。之后,会写篇博客介绍本人自己实现的Promise/a+规范。希望不会贻笑大方吧-_-