const then = x.then
if (typeof then === 'function') {
// 1 、 通不过 Promise A+测试
x.then((r) => { ... }, e => { ... })
// 2 、通过 Promise A+测试
then.call(x, (r) => { ... }, e => { ... })
} else {
resolve(x)
}
请教大佬问题出在哪里
1
middle2000 OP 有大佬帮忙解答下么
|
2
azcvcza 2023-02-25 09:26:23 +08:00
你要让 x.then 作为函数工作的话
是不是要写成(x.then((r)=>{...},e=>{...}))();写成 IIFE 来立即调用,你光 x.then()只是往 promise 的 then 数组里加了下一个执行项。 我看你下边 then.call 是想拿来当函数调用,当函数调用的话那不就得转成 IIFE 了吗 |
3
Opportunity 2023-02-25 10:19:05 +08:00 1
方法 1 访问了两次 x 的 then 属性,如果是个 getter 的话,会有额外的副作用
> 3.5 This procedure of first storing a reference to x.then, then testing that reference, and then calling that reference, avoids multiple accesses to the x.then property. Such precautions are important for ensuring consistency in the face of an accessor property, whose value could change between retrievals. |
4
middle2000 OP @Opportunity 了解了,感谢
|