Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: TypeError: cannot read property 'then' of undefined #17020

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

nieheyong
Copy link

这个 PR 做了什么? (简要描述所做更改)

在我们线上项目发现sentry报错 TypeError: cannot read property 'then' of undefined
错误指向了压缩后的代码

image

对应 taro 代码 在 https://github.com/NervJS/taro/blob/feat/4.0.6/packages/taro-runtime/src/dsl/common.ts#L240-L254

LIFECYCLES.forEach((lifecycle) => {
    let isDefer = false
    lifecycle = lifecycle.replace(/^defer:/, () => {
      isDefer = true
      return ''
    })
    config[lifecycle] = function () {
      const exec = () => safeExecute(this.$taroPath, lifecycle, ...arguments)
      if (isDefer) {
        hasLoaded.then(exec)
      } else {
        return exec()
      }
    }
  })

也就是代码 hasLoaded.then(exec) 报错,因为hasLoaded对象是undefined,经过分析发现 hasLoaded 对象默认是undefined,直到 ONLOAD 事件后才有值,因此更新了逻辑,在hasLoaded 为 undefined 时,将function放到队列中,等ONLOAD事件后再运行

这个 PR 是什么类型? (至少选择一个)

  • 错误修复(Bugfix) issue: fix #
  • 新功能(Feature)
  • 代码重构(Refactor)
  • TypeScript 类型定义修改(Typings)
  • 文档修改(Docs)
  • 代码风格更新(Code style update)
  • 其他,请描述(Other, please describe):

这个 PR 涉及以下平台:

  • 所有小程序
  • 微信小程序
  • 支付宝小程序
  • 百度小程序
  • 字节跳动小程序
  • QQ 轻应用
  • 京东小程序
  • 快应用平台(QuickApp)
  • Web 平台(H5)
  • 移动端(React-Native)
  • 鸿蒙(harmony)

This was referenced Dec 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant