
326
|
第
13
章
我们通常会传入兑现值,创建一个很快就兑现为该值的期约对象。但是这个方法的名字
并不叫
Promise.fulfill()
。如果把期约
p1
传给
Promise.resolve()
,它会返回一个新
期约
p2
,
p2
会立即解决,但要等到
p1
兑现或被拒绝时才会兑现或被拒绝。
写一个基于期约的函数,其中值是同步计算得到的,但使用
Promise.resolve()
异步返
回是可能的,但不常见。不过在一个异步函数中包含同步执行的代码,通过
Promise.
resolve()
和
Promise.reject()
来处理这些同步操作的值倒是相当常见。特别地,如
果在开始异步操作前检测错误条件(如坏参数值),那可以通过返回
Promise.reject()
创建的期约来报告该错误(这种情况下也可以同步抛出一个错误,但这种做法并不推荐,
因为这样一来,函数的调用者为了处理错误既要写同步的
catch
子句,还要使用异步
的
.catch()
方法)。最后,
Promise.resolve()
有时候也可以用来创建一个期约链的第
一个期约。稍后可以看到几个这样使用它的示例。
从头开始创建期约
对于
getJSON()
和
getHighScore()
,我们都是一开始先调用一个现有函数得到初始期
约,然后再通过调用该期约的
.then()
方法创建并返回新期约。如果我们不能使用一
个返回期约的函数作为起点,那么怎么写一个返回期约的函数呢?这时候,可以使用
Promise()
构造函数来创建一个新期约对象,而且可以完全控制这个新期约。过程如
下:调用 ...