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.js
和 angular-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.5
,angular-resource@1.5
,angular-route.js@1.5
等,我在尝试的时候看到了不愉快的问题混合和匹配 AngularJS 模块的版本。
迁移时,我建议一次升级一个次要版本。比如先从V1.4升级到V1.5,修复坏了再升级到V1.6。
当前版本为1.7.9 pollution-eradication (2019-11-19)
。我建议使用最新版本,因为 AngularJS 团队已承诺仅修复 V1.2.x 和最新版本中的安全漏洞。
有关详细信息,请参阅
- AngularJS Developer Guide - Migrating from Previous Versions
- AngularJS Version Support Status - Long Term Support
升级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。两者之间发生了重大的重大变化,最好逐步处理。
有关详细信息,请参阅
我知道有些问题,例如 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.js
和 angular-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.5
,angular-resource@1.5
,angular-route.js@1.5
等,我在尝试的时候看到了不愉快的问题混合和匹配 AngularJS 模块的版本。
迁移时,我建议一次升级一个次要版本。比如先从V1.4升级到V1.5,修复坏了再升级到V1.6。
当前版本为1.7.9 pollution-eradication (2019-11-19)
。我建议使用最新版本,因为 AngularJS 团队已承诺仅修复 V1.2.x 和最新版本中的安全漏洞。
有关详细信息,请参阅
- AngularJS Developer Guide - Migrating from Previous Versions
- AngularJS Version Support Status - Long Term Support
升级Angular-UI-路由器
UI-AngularJS 的路由器有两个主要版本
Version
0.4.3
UI-Router-LegacyVersion
1.0.25
UI-Router for AngularJS
我建议先升级到最新版本的 UI-Router-Legacy,然后再迁移到最新版本的 UI-Router for AngularJS。两者之间发生了重大的重大变化,最好逐步处理。
有关详细信息,请参阅