【问题标题】:Uncaught (in promise) undefinedUncaught (in promise) undefined
【发布时间】:2019-12-17 04:34:02
【问题描述】:

我在 chrome 中收到以下错误,但不知道它来自哪里:

唯一真正能说明问题的是我最近重构了大约 10,000 行代码,而这个错误出现在其中的某个时间。这是棱角分明的。我知道如何用角度来捕捉承诺。我正在使用错误处理程序来尝试捕获它,但它不起作用我也尝试过:

window.addEventListener('unhandledrejection', function (promiseRejectionEvent) {
  console.log(promiseRejectionEvent);
  console.log('here!!!!!')
});
window.onerror = function (promiseRejectionEvent) {
  console.log(promiseRejectionEvent);
  console.log('AHHHH')
};

其中一个都没有发现错误。我不知道这个错误来自哪里。每次我重新加载页面时都会出现。

对于真正好奇的人,我尝试访问 chrome 中的链接,它指向...所以没有真正的帮助。

Firefox 不会发生此错误。

【问题讨论】:

  • 很抱歉,这里没有人可以帮助您。只是没有足够的信息。
  • 我真的不认为任何人能够告诉我如何调试这个......但我有足够的希望在这里发布这个,以便将来遇到这个奇怪错误的人会看到他是不是一个人在悲伤中。
  • 提示:您的错误在cell-dial 的第一行代码中。我也会质疑为什么让不懂 Angular 的人负责重构 10,000 行代码。
  • .....真的....??我知道角。我构建了这 10,000 条线路中的大部分。错误肯定不在单元拨号的第一行。这指向我的 index.html 文档。
  • 我猜你在 prod 模式下构建了你的应用程序。尝试在将 sourceMap 标志设置为 true 的情况下构建它,并尝试从检查器中调试代码。

标签: angular typescript google-chrome promise


【解决方案1】:

消息Uncaught (in promise) 是 zone.js 的一部分:

https://github.com/angular/zone.js/blob/master/lib/common/promise.ts#L194

使用 chrome 开发工具,在所有文件 (cmd/ctrl+shift+f) 中搜索此文本或跳转 (cmd/ctrl + p) 到 zone.js 并找到“未捕获”。设置断点,重新加载页面并在断点被命中后检查调用堆栈。

希望这会为您指明正确的方向。

【讨论】:

  • 虽然不是很正确,但我给了你分数,因为它为我指明了正确的方向。
  • 感谢@SamuelThompson,希望您找到问题所在 - 有什么值得分享的吗?
【解决方案2】:

尝试在隐身模式下运行您的代码。

我找到了答案,但并不令人满意。这是一个 Microsoft Office 扩展,它以某种方式注入了一些被 zone.js 捕获的东西,但不是。我不知道这是怎么发生的。

发现错误:

如果您让 chrome 在异常时暂停,那么它将在出现此错误时停止。错误出现在我的项目中没有的 content.js 文件中,所以我说“嗯……”。然后我通过右键单击源选项卡转到文件的位置,发现错误在 Office 扩展中。所以如果你得到这个Uncaught (in promise) undefined,那是因为 zone.js 错误处理正在捕获它。我不知道怎么做,但请尝试在隐身模式下运行您的代码。

【讨论】:

    【解决方案3】:

    错误告诉你有一个错误,但你没有抓住它。很可能您可以检查负责路由器的路由 /app/outbound/cell-dial 或任何与之相关的路由保护功能。

    有关路由的更多信息,尤其是有关路由器保护的信息:https://angular.io/guide/router

    其他选项是:

    • 重新安装依赖项
    // Delete
    rm -rf node_modules/
    npm install
    
    • 逐步检查与上次提交/合并/拉取的 repo 差异

    • 检查您的版本,因为您可能拥有与以前不同的依赖项版本,但未正确设置。

    一般来说,这是你可以捕捉到它的方法(你可能已经知道了,但我还是提到它以防万一):

    getAllPosts().then(response => {
        console.log(response);
    }).catch(e => {
        console.log(e);
    });
    

    更多信息:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch

    或者使用异步/等待:

    //some async function
    try {
        let response = await getAllPosts();
    } catch(e) {
        console.log(e);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 2021-04-15
      • 2021-08-18
      • 1970-01-01
      • 2021-01-08
      • 2021-09-20
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多