Я использую angular с bluebird и угловатые-синие-обещания, чтобы переопределить встроенное обещание Angular. После обновления до angular v1.6.5 при вызове $ interval.cancel накапливается исключение. Я проверил более раннюю версию angular, и был добавлен следующий код:
function markQStateExceptionHandled(state) {
state.pur = true;
}
function markQExceptionHandled(q) {
markQStateExceptionHandled(q.$$state);
}
проблема в том, что обещание bluebird не имеет атрибута состояния $$ и генерируется исключение:
> TypeError: Cannot set property 'pur' of undefined
> at markQStateExceptionHandled (angular.js?3437:17654)
> at markQExceptionHandled (angular.js?3437:17657)
> at Function.interval.cancel (angular.js?3437:13650)
> at eval (ng-infinite-scroll.js?6418:180)
> at callback (angular.js?3437:13629)
> at Scope.$digest (angular.js?3437:18515)
> at Scope.$apply (angular.js?3437:18903)
> at tick (angular.js?3437:13619)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это ошибка в Angular.js. Существует пул реквест, чтобы исправить это, изменив код, чтобы проверить наличие $$state:
function markQStateExceptionHandled(state) {
if (state) {
state.pur = true;
}
}
Срок выхода 1.6.10. А пока вы можете исправить это со стороны Bluebird, выполнив:
Promise.prototype.$$state = {};
Я могу пообещать, что он ничего не испортит со стороны bluebird и не будет иметь слишком много недостатков, кроме уродливого взлома.
Спасибо за быстрый ответ. При добавлении этой строки срабатывает необработанное событие отказа. Я думаю, это из-за отмененного обещания
Я не уверен, где находится приведенный выше код, но в качестве временного взлома вы можете сделать
Promise.prototype.$$state = {}, с которым bluebird будет в порядке