dca*_*tro 3 javascript promise
我为什么这样做:
> Promise.reject(3);
< Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: 3}
Run Code Online (Sandbox Code Playgroud)
但不是这个:
> var f = Promise.reject;
< undefined
> f(3)
< VM2366:1 Uncaught TypeError: PromiseReject called on non-object
at reject (<anonymous>)
at <anonymous>:1:1
Run Code Online (Sandbox Code Playgroud)
该规范定义Promise.reject如下(重点煤矿):
25.4.4.4
Promise.reject( r )reject函数返回一个被传递的参数拒绝的新promise.
- 设C为该值.
- 如果Type(C)不是Object,则抛出
TypeError异常.- 让promiseCapability成为?NewPromiseCapability(C).
- 表演?调用(promiseCapability.[[Reject]],undefined,«r»).
- 返回promiseCapability.[[Promise]].
注意:该
reject函数期望其this值是一个构造函数,它支持构造函数的参数约定Promise.
正如您所知,Promise.reject期望在Promise构造函数(本机承诺或其他兼容实现)上调用.当把它Promise.reject当作类的第一类函数来处理时,你在全局对象上调用它,它不是一个Promise构造函数,因此失败了.1
如果你需要以Promise.reject这种方式使用,我建议先绑定它:
var f = Promise.reject.bind(Promise);
f(3); // Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: 3}
Run Code Online (Sandbox Code Playgroud)
1我不确定为什么全局对象不被视为对象,但是,因为Promise.reject.call({ })给出了Uncaught TypeError: object is not a constructor.
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |