AngularJS 1.7.9 : 如何调试 "Possibly unhandled rejection: {}"?

AngularJS 1.7.9 : how to debug "Possibly unhandled rejection: {}"?

我知道有些问题,例如 Angularjs 1.7.9 - Possibly unhandled rejection 和其中提到的重复问题。

但是,我的代码没有使用承诺(据我所知;当然没有 $promise$http)。

我只是在为朋友制作一个简单的 ui-router 演示。它只有两个视图,每个视图都有一个切换到另一个视图的按钮。它在 AngulrJs 1.5 上工作得很好,并在 1.7 中因上述错误而中断。

虽然很简单,但代码太多 post。以防万一,而不是在我的代码中发现错误,我会喜欢一个规范的答案来帮助将来阅读这个问题的其他人:如何去消除这个错误消息?

Error: transition failed (caused by "Possibly unhandled rejection: {}")

at r [as $get] (http://localhost/common/js/third_party/ui-router_zero_pint_2_point_11/angular-ui-router.min.js:7:11365)  
at Object.invoke (http://localhost/common/js/third_party/angular-1_point_7_point_9/angular.min.js:45:62)  
at http://localhost/common/js/third_party/angular-1_point_7_point_9/angular.min.js:46:365  
at d (http://localhost/common/js/third_party/angular-1_point_7_point_9/angular.min.js:43:495)  
at e (http://localhost/common/js/third_party/angular-1_point_7_point_9/angular.min.js:44:235)  
at Object.invoke (http://localhost/common/js/third_party/angular-1_point_7_point_9/angular.min.js:44:320)  
at http://localhost/common/js/third_party/angular-1_point_7_point_9/angular.min.js:47:18  
at r (http://localhost/common/js/third_party/angular-1_point_7_point_9/angular.min.js:8:76)  
at fb (http://localhost/common/js/third_party/angular-1_point_7_point_9/angular.min.js:46:499)  
at c (http://localhost/common/js/third_party/angular-1_point_7_point_9/angular.min.js:22:57)  

调试 ui-router 的一种方法如下:

从控制台注入 $state 服务,键入以下内容:

var test = angular.element(document.body).injector().get('$state');

然后模拟并执行导致问题的转换:

test.go('root.details') // use the state url here

之后,转换的详细信息将打印在控制台中。在 $$state 对象中,您可能会找到有关失败转换和失败原因的更多详细信息:

The latest version of UI-router (1.0.25) solved the problem. Feel free to post an answer.

如果您使用 angular.js 而不是 angular.min.jsangular-ui-router.js 而不是 angular-ui-router.min.js,您将获得更多信息的堆栈跟踪。 Angular-UI-路由器在其转换模块中使用 promises。看起来你升级了你的 AngularJS 版本,但没有升级 Angular-UI-Router 的版本。将您的路由器从 V0.2.11 升级到 V0.4.3。看来您的问题是由草率的 Angular-UI-路由器代码引起的。如果他们没有通过 V0.4.3 解决问题,您可以修补库或接受消息。

调试中"possibly unhandled rejection"

堆栈跟踪将显示文件和产生错误的行号。检查代码并解决问题。如果错误源于第三方库,请尝试升级到最新版本或联系第三方库供应商。

作为最后的手段,禁用 "possibly unhandled rejection" 消息:

app.config(functon ($qProvider) {
    $qProvider.errorOnUnhandledRejections(false);
}); 

不推荐这样做,因为它会让其他问题悄无声息地失败。

如果不关心特定的承诺失败,请添加一个 .catch 处理程序:

$http(config).then(function(response) {
    //...
}).catch(function(response) {
   //I don't care about errors
   if (debug) console.log(response);
   //Re-throw error response
   throw response;
})

正在升级 AngularJS

升级AngularJS时,最好同时升级所有AngularJS模块。也就是从angular.js@1.4迁移到angular.js@1.5,同时升级到angular-animate@1.5angular-resource@1.5angular-route.js@1.5等,我在尝试的时候看到了不愉快的问题混合和匹配 AngularJS 模块的版本。

迁移时,我建议一次升级一个次要版本。比如先从V1.4升级到V1.5,修复坏了再升级到V1.6。

当前版本为1.7.9 pollution-eradication (2019-11-19)。我建议使用最新版本,因为 AngularJS 团队已承诺仅修复 V1.2.x 和最新版本中的安全漏洞。 有关详细信息,请参阅

升级Angular-UI-路由器

UI-AngularJS 的路由器有两个主要版本

Version 0.4.3 UI-Router-Legacy

Version 1.0.25 UI-Router for AngularJS

我建议先升级到最新版本的 UI-Router-Legacy,然后再迁移到最新版本的 UI-Router for AngularJS。两者之间发生了重大的重大变化,最好逐步处理。

有关详细信息,请参阅