AngularJS 1.7.9: как отладить «Возможно необработанное отклонение: {}»? - PullRequest
1 голос
/ 22 февраля 2020

Мне известны некоторые вопросы, такие как Angularjs 1.7.9 - возможно необработанное отклонение и те, которые упомянуты в нем как дубликаты.

Однако мой код делает не использую обещания (о которых я знаю; конечно, нет $promise или $http).

Я просто запускаю простую демоверсию ui-router для друга. Это просто два вида, каждый с кнопкой, которая переключается на другой вид. Он отлично работает с Angulr Js 1.5 и не работает с вышеуказанной ошибкой в ​​1.7.

Все просто, слишком много кода для публикации. В этом случае вместо того, чтобы найти ошибку в своем коде, я хотел бы, как канонический ответ, помочь другим, кто прочитает этот вопрос в будущем: как go отладить это сообщение об ошибке?

Ошибка: переход не выполнен (вызвано «Возможно необработанное отклонение: {}»)

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)  

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Последняя версия UI-router (1.0.25) решила проблему. Не стесняйтесь опубликовать ответ.

Вы получите более информативную трассировку стека, если вы используете angular.js вместо angular.min.js и angular-ui-router.js вместо angular-ui-router.min.js. Angular -UI-Router использует обещания в своем переходном модуле. Похоже, вы обновили свою версию 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);
}); 

Это не рекомендуется, так как позволяет другим проблемам молча терпеть неудачу.

Если вас не волнует, что конкретное c обещание не выполняется, добавьте обработчик .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 и т. Д. c. Я столкнулся с неприятными проблемами при попытке смешать и сопоставить версии модулей AngularJS.

При переносе я рекомендую обновлять по одной вспомогательной версии за раз. Например, сначала обновите V1.4 до V1.5, исправьте ошибки, а затем обновите до V1.6.

Текущая версия - 1.7.9 pollution-eradication (2019-11-19). Я рекомендую использовать последнюю версию, поскольку команда AngularJS обязуется исправлять ошибки безопасности только в V1.2.x и в последней версии. Для получения дополнительной информации см.

Обновление Angular -UI-Router

UI-Router для AngularJS имеет две основные версии

Версия 0.4.3 UI-Router-Legacy

Версия 1.0.25 UI-Router для AngularJS

Я рекомендую обновить до последней версии UI-Router-Legacy перед переходом на последнюю версию UI-Router для AngularJS. Между этими двумя произошли серьезные переломные изменения, и лучше всего разбираться с ними постепенно.

Для получения дополнительной информации см.

1 голос
/ 24 февраля 2020

Один из способов отладки ui-router заключается в следующем:

Из консоли введите сервис $state, набрав следующее:

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

Затем смоделируйте и выполните переход, который вызывает проблема:

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

После этого детали перехода будут напечатаны в консоли. В объекте $$state вы можете найти более подробную информацию о сбое перехода и причинах сбоя: enter image description here

...