推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
middle2000

Promise 问题求解

  •  
  •   middle2000 · Feb 24, 2023 · 2298 views
    This topic created in 1174 days ago, the information mentioned may be changed or developed.
                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)
                }
    

    请教大佬问题出在哪里

    4 replies    2023-02-25 23:09:15 +08:00
    middle2000
        1
    middle2000  
    OP
       Feb 24, 2023
    有大佬帮忙解答下么
    azcvcza
        2
    azcvcza  
       Feb 25, 2023
    你要让 x.then 作为函数工作的话
    是不是要写成(x.then((r)=>{...},e=>{...}))();写成 IIFE 来立即调用,你光 x.then()只是往 promise 的 then 数组里加了下一个执行项。
    我看你下边 then.call 是想拿来当函数调用,当函数调用的话那不就得转成 IIFE 了吗
    Opportunity
        3
    Opportunity  
       Feb 25, 2023   ❤️ 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.
    middle2000
        4
    middle2000  
    OP
       Feb 25, 2023
    @Opportunity 了解了,感谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5804 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 85ms · UTC 06:31 · PVG 14:31 · LAX 23:31 · JFK 02:31
    ♥ Do have faith in what you're doing.