You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

printAbstraction() 在这段自定义Promise代码中是如何执行的?

解答:squareAreaPromise的fulfil调用逻辑解析

你要找的squareAreaPromise的fulfil调用,藏在sidePromise被fulfil后触发的依赖回调里,通过嵌套的depend调用完成。下面一步步拆解执行流程:

1. 初始化阶段:绑定依赖

当执行var squareAreaPromise = depend(sidePromise, squareAreaAbstraction)时:

  • sidePromise此时处于pending状态,进入depend函数的if分支
  • 向sidePromise.dependencies中推入一个匿名回调函数,核心逻辑如下:
    function(value) {
      depend(expression(value), function(newValue) {
        fulfil(result, newValue); // 这里的`result`就是最终的squareAreaPromise
        return createPromise();
      })
    }
    
    这里的result是depend函数开头创建的空promise,也就是最终返回的squareAreaPromise。

2. 触发sidePromise的fulfil

执行fulfil(sidePromise, 10)时:

  • sidePromise状态变为fulfilled,值设为10
  • 遍历sidePromise.dependencies中的回调,执行刚才推入的匿名函数,传入参数value=10

3. 执行squareAreaAbstraction并触发squareAreaPromise的fulfil

在匿名回调函数内部:

  1. 调用expression(value)即squareAreaAbstraction(10),这个函数内部:
    • 创建新promise,立刻调用fulfil(result, 10*10=100),返回这个已fulfilled的promise
  2. 接着调用depend(这个已fulfilled的promise, 匿名函数):
    • 因为传入的promise状态是fulfilled,进入depend函数的else分支
    • 执行expression(promise.value)即匿名函数function(newValue) { fulfil(result, newValue); ... },传入newValue=100
    • 此时执行fulfil(result, 100),这里的result就是最开始depend返回的squareAreaPromise——这就是你要找的调用点!

4. 后续printPromise的触发逻辑同理

squareAreaPromise被fulfil后,会触发它自己的依赖回调(创建printPromise时绑定的),进而执行printAbstraction(100),最终完成console.log的调用。

补充:关于depend里返回空promise的原因

代码里嵌套的depend调用最后返回createPromise(),是因为depend函数要求必须返回一个promise,但这里的匿名函数只是用来触发目标promise的fulfil,不需要实际传递值,所以返回一个空的pending promise即可,不影响流程。


内容的提问来源于stack exchange,提问作者Saurav Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:56:59