angularjs promises:然后在 deferred.resolve() 超时之前调用

angularjs promises: then called before deferred.resolve() in timeout

我有类似于下面的代码。它应该打印 "in intermediate then",然后打印 "in final then",但它首先打印 "in final then"(即 then 函数在调用 deferred.resolve() 之前被调用)。知道为什么会这样吗?与 $timeout 有关系吗?

var promise = myFunctionThatReturnsAPromise();
promise.then(function() {
  console.log('in final then!');
});

var myFunctionThatReturnsAPromise = function() {
   var deferred = $q.defer();
   $timeout(function() {
      console.log('in intermediate then');
      deferred.resolve();
   }, 0);
   return deferred.$promise;
};

我很确定你应该 return deferred.promise,而不是 $

这是一个plunker