0
我有類似於下面的代碼。它應該打印出「in intermediate then」和after then「in final then」,但它首先打印「in final then」(即在調用deferred.resolve()之前調用then函數)。任何想法,爲什麼會發生這種情況?它是否與$超時有關?angularjs承諾:然後在超時之前調用deferred.resolve()
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獨立於摘要循環運行,所以對於您所尋找的內容可能更可靠。 –
應該是'return deferred.promise'。此外,在這種特殊情況下,您不需要另一個承諾 - 只需返回'$ timeout'生成的承諾 - 'return $ timeout(function(){...}) –