不能设置属性' pur'未定义的

时间:2018-05-07 08:28:11

标签: javascript angular promise bluebird

我使用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)

1 个答案:

答案 0 :(得分:0)

这是bug in Angular.js。有一个pull request可以通过更改代码来检查$$state来修复它:

function markQStateExceptionHandled(state) {
  if (state) {
    state.pur = true;
  }
}

应该是1.6.10。在此期间,您可以通过执行以下操作从Bluebird的方面修复它:

Promise.prototype.$$state = {};

我可以保证,除了作为一个丑陋的黑客之外,它不会从蓝鸟那里搞砸任何东西,也不会有太多的缺点。