angularjs承诺:然后在超时时在deferred.resolve()之前调用
我有类似于下面的代码。它应该打印“中间然后”和“最终然后”,但它首先打印“最终然后”(即在调用deferred.resolve()之前调用then函数)。知道为什么会这样吗?这与$timeout有关吗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
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
-因此您返回了未定义的。您的代码刚刚中断(请检查控制台)