我知道一些类似的问题,例如Angularjs 1.7.9 - Possibly unhandled rejection及其中提到的重复项。
但是,我的代码没有使用诺言(我知道;当然没有$promise
或$http
)。
我只是为一个朋友制作了一个简单的ui-router
演示。它只是两个视图,每个视图都有一个切换到另一个视图的按钮。它在AngulrJs 1.5上可以正常工作,并在1.7中因上述错误而中断。
虽然很简单,但是要发布的代码太多了。以防万一,而不是在我的代码中发现错误,我希望得到一个规范的答案,以帮助以后阅读此问题的其他人:如何着手处理此错误消息?
错误:转换失败(由“可能未处理的拒绝:{}”引起)
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)
答案 0 :(得分:1)
以下是调试ui-router
的一种方法:
从控制台注入$state
服务,键入以下内容:
var test = angular.element(document.body).injector().get('$state');
然后模拟并执行导致问题的过渡:
test.go('root.details') // use the state url here
答案 1 :(得分:1)
最新版本的UI-router(1.0.25)解决了该问题。随时发布答案。
如果使用angular.js
代替angular.min.js
,而使用angular-ui-router.js
代替angular-ui-router.min.js
,则将获得更多的堆栈跟踪信息。 Angular-UI-Router在其过渡模块中使用promise。好像您升级了AngularJS的版本而没有升级Angular-UI-Router的版本。将路由器从V0.2.11升级到V0.4.3。看来您的问题是由不正确的Angular-UI-Router代码引起的。如果他们在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模块。那就是从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的UI-Router有两个主要版本
版本
0.4.3
UI-Router-Legacy版本
1.0.25
UI-Router for AngularJS
我建议先迁移到最新版本的UI-Router-Legacy,然后再迁移到最新版本的UI-Router for AngularJS。两者之间发生了重大的突破性变化,最好逐步解决。
有关更多信息,请参见