Promise 问题求解

2023-02-24 16:27:52 +08:00
 middle2000
            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)
            }

请教大佬问题出在哪里

1410 次点击
所在节点    JavaScript
4 条回复
middle2000
2023-02-24 18:30:56 +08:00
有大佬帮忙解答下么
azcvcza
2023-02-25 09:26:23 +08:00
你要让 x.then 作为函数工作的话
是不是要写成(x.then((r)=>{...},e=>{...}))();写成 IIFE 来立即调用,你光 x.then()只是往 promise 的 then 数组里加了下一个执行项。
我看你下边 then.call 是想拿来当函数调用,当函数调用的话那不就得转成 IIFE 了吗
Opportunity
2023-02-25 10:19:05 +08:00
方法 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.
middle2000
2023-02-25 23:09:15 +08:00
@Opportunity 了解了,感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/918917

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX