$q 是否在承诺链的 resolution/rejection 上包含一个隐含的 digest/apply?

Does $q include an implicit digest/apply upon resolution/rejection of the promise chain?

$q是否在承诺链的 resolution/rejection 上包含一个隐含的 digest/apply?

我已将一段代码从 $q 迁移到使用 q,现在似乎缺少摘要,导致不同的行为。为什么会这样?

甚至更多 - 只要 QProvider 定义如下,它就包含显式:

function $QProvider() {
  this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {
    return qFactory(function(callback) {
      $rootScope.$evalAsync(callback); // ! $evalAsync()
    }, $exceptionHandler);
  }];
}

从这个函数声明中有一个简短的方法 .$evalAsync() 对于 versin 1.2.28 看起来像

$evalAsync: function(expr) {
    // if we are outside of an $digest loop and this is the first time we are scheduling async
    // task also schedule async auto-flush
    if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) {
      $browser.defer(function() {
        if ($rootScope.$$asyncQueue.length) {
          $rootScope.$digest(); // ! $digest()
        }
      });
    }

    this.$$asyncQueue.push({scope: this, expression: expr});
},