我使用angular with bluebird和angular-bluebird-promises来覆盖内置的Angular承诺。 在调用$ interval.cancel时升级到angular v1.6.5后会产生异常。我已检查角度的早期版本,并添加了以下代码:
function markQStateExceptionHandled(state) {
state.pur = true;
}
function markQExceptionHandled(q) {
markQStateExceptionHandled(q.$$state);
}
问题是bluebird promise没有$$ state属性并抛出异常:
> 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)
答案 0 :(得分:0)
这是bug in Angular.js。有一个pull request可以通过更改代码来检查$$state
来修复它:
function markQStateExceptionHandled(state) {
if (state) {
state.pur = true;
}
}
应该是1.6.10。在此期间,您可以通过执行以下操作从Bluebird的方面修复它:
Promise.prototype.$$state = {};
我可以保证,除了作为一个丑陋的黑客之外,它不会从蓝鸟那里搞砸任何东西,也不会有太多的缺点。