[翻译]Promise A+规范

发表于 2019-07-06  90 次阅读


文章目录

1.术语

1.1 "promise"是一个对象或函数,其then方法的行为符合本规范。
1.2 "thenable"是一个定义了then方法的对象或函数。
1.3 "value"是任何合法的JavaScript值(包括undefined,thenable或者promise)。
1.4 "exception"是使用throw语句抛出的值。
1.5 "reason"是一个值,表明promise被rejected的原因。

2.要求

2.1 Promise状态

一个promise必须是以下三种状态之一: pending、fulfilled或者rejected。
2.1.1 当promise处于pending状态:
  2.1.1.1 可以转化为fulfilled或者rejected状态。
2.1.2 当promise处于fulfilled状态:
  2.1.2.1 一定不能转化为任何其它状态。
  2.1.2.2 有一个一定不会改变的"value"。
2.1.3 当promise处于rejected状态:
  2.1.3.1 一定不能转化为任何其它状态。
  2.1.3.2 有一个一定不会改变的"reason"。
此处,“一定不会改变”意思是标识不可改变(即===),并不意味着深度不可改变。

2.2 then方法

一个promise必须提供then方法来读取它当前或最终的"value"或"reason"
一个promise的then方法接受两个参数:

    promise.then(onFulfilled, onRejected)

2.2.1 onFulfilledonRejected都是可选参数
  2.2.1.1 如果onFulfilled不是一个函数,它会被忽略
  2.2.1.2 如果onRejected不是一个函数,它会被忽略
2.2.2 如果onFulfilled是一个函数
  2.2.2.1 当promise是fulfilled状态时,传入promise的"value"作为它的第一个参数调用。
  2.2.2.2 在promise是fulfilled状态之前,它一定不会被调用。
  2.2.2.3 它不会被调用超过一次。
2.2.3 如果onRejected是一个函数
  2.2.3.1 当promise是rejected状态时,传入promise的"reason"作为它的第一个参数调用。
  2.2.3.2 在promise是rejected状态之前,它一定不会被调用。
  2.2.3.3 它不会被调用超过一次。
2.2.4 onFulfilledonRejected一定不会调用,除非执行上下文堆栈只包含平台代码。[3.1]。
2.2.5 onFulfilledonRejected必须作为函数调用。(即没有this值)[3.2]
2.2.6 在同一promise,then可能会被调用多次。
  2.2.6.1 如果/当promise是fulfilled状态时,所有各自onFulfilled回调必须按照它们原始的then调用的次序执行。
  2.2.6.2 如果/当promise是rejected状态时,所有各自onRejected回调必须按照它们原始的then调用的次序执行。
2.2.7 then方法必须返回一个promise。[3.3]

    promise2 = promise1.then(onFulfilled, onRejected);

  2.2.7.1 如果onFulfilledonRejected返回一个值x,运行promise解析程序[[Resolve]](promise2, x)
  2.2.7.2 如果onFulfilledonRejected抛出一个异常epromise2必须是rejected状态,e作为它的"reason"。
  2.2.7.3 如果onFulfilled不是一个函数并且promise1是fulfilled状态,promise2必须是fulfilled状态,它的"value"和promise1的"value"一样。
  2.2.7.4 如果onRejected不是一个函数并且promise1是rejected状态,promise2必须是rejected状态,它的"reason"和promise1的"reason"一样。

2.3 promise解决程序

3.注解

(未完待续)

本站文章基于国际协议BY-NA-SA 4.0协议共享;
如未特殊说明,本站文章皆为原创文章,请规范转载。

0

眼前解决不了的问题, 都可交付未来, 时间是一个伟大的作者, 他必将写出, 最完美的答案。