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

angularjs承诺:然后在超时时在deferred.resolve()之前调用,angularjs,angular-promise,Angularjs,Angular Promise,我有类似于下面的代码。它应该打印“中间然后”和“最终然后”,但它首先打印“最终然后”(即在调用deferred.resolve()之前调用then函数)。知道为什么会这样吗?这与$timeout有关吗 var promise = myFunctionThatReturnsAPromise(); promise.then(function() { console.log('in final then!'); }); var myFunctionThatReturnsAPromise = fu

我有类似于下面的代码。它应该打印“中间然后”和“最终然后”,但它首先打印“最终然后”(即在调用deferred.resolve()之前调用then函数)。知道为什么会这样吗?这与$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;
};

我很确定您应该延迟返回
。承诺
,而不使用
$


下面是一个

如果更改超时长度,是否仍会发生这种情况?我认为这与超时队列和承诺队列在同一时间内的同步有关。或者,我认为setTimeout独立于摘要周期运行,因此对于您所寻找的内容可能更可靠。应
延迟返回。承诺
。另外,在这种特殊情况下,您不需要另一个承诺-只需返回由
$timeout
-
返回$timeout(function(){…})
Good point@NewDev生成的承诺即可。好的,所以问题确实被推迟了。承诺vs推迟。$promise。区别是什么?没有
$promise
-因此您返回了
未定义的
。您的代码刚刚中断(请检查控制台)