Angular UpgradeModule $ rootScope。$ digest错误,即使我们没有手动触发摘要

时间:2017-09-26 21:42:37

标签: angular angular-digest angular-upgrade

我们有一个超级奇怪的登录错误,似乎是由Angular的UpgradeModule中的this line引起的,所以我对该行有疑问。

为什么:

var subscription = _this.ngZone.onMicrotaskEmpty.subscribe(function () { return $rootScope.$digest(); });

不是这样的:

var subscription  = _this.ngZone.onMicrotaskEmpty.subscribe(function () {
  if($rootScope.$$phase === null){
    return $rootScope.$digest();
  }
});

为什么没有检查该摘要的阶段?

因为在第214行,甚至有一条评论说

“在下一个虚拟机转弯中运行回调 - $ interval调用$ rootScope。$ apply,并且在NgZone中运行回调将导致'$ digest已在进行中'错误,如果它在同一个vm转弯中”

该代码假定,因为它一直等到下一个滴答,所以还没有发生$ digest阶段。

我们没有使用$ interval,但显然是没有setTimeout调用那些行会导致我们看到的确切错误,所以不应该进行某种阶段检查吗?

(而不是假设超时解决问题)......这似乎是一种竞争条件。

使用angular AND angularjs标记的原因是因为这是angular的升级模块。升级模块使用角度内的angularjs。

0 个答案:

没有答案