[英]Nonconsecutive $timeoutId using $timeout inside a promise chain (AngularJS 1.x)
我有一個非常簡單的控制器,它連續運行三個超時,一個在承諾鏈中一個接一個地運行。 我使用了一個函數timeoutHelper
來創建超時並將其記錄到控制台。
.controller('ctrl', function($timeout) {
function timeoutHelper(time) {
var t = $timeout(time);
console.log(t);
return t;
}
timeoutHelper(500)
.then(function(){
return timeoutHelper(500);
})
.then(function(){
return timeoutHelper(500);
});
})
它工作正常,並且每個$timeout
在500毫秒后都記錄到控制台,但是$$timeoutId
是不連續的。 輸出到控制台看起來像這樣
Promise {$$state: Object, $$timeoutId: 1}
Promise {$$state: Object, $$timeoutId: 3}
Promise {$$state: Object, $$timeoutId: 5}
在承諾鏈之外創建$timeout
導致連續的$$timeoutId
符合預期。 為什么會這樣呢?
這是一個問題,是因為在單元測試中刷新$timeout
遇到問題。 打完電話后$timeout.flush(500)
三次我得到調用時拋出一個異常$timeout.verifyNoPendingTasks
。 這個示例只是我在應用程序中所做的簡化版本,但它演示了相同的問題。
這是代碼的Plunkr
而不是調用.then
方法中的函數。 通過timeou函數作為參數的.then
方法
angular.module('timeoutApp', [])
.controller('ctrl', function($timeout, $q, $scope) {
function timeoutHelper(time) {
var t = $timeout(time);
console.log(t);
return t;
}
timeoutHelper(500)
.then(timeoutHelper(500))
.then(timeoutHelper(500));
})
結果
Promise {$$state: Object, $$timeoutId: 1}
Promise {$$state: Object, $$timeoutId: 2}
Promise {$$state: Object, $$timeoutId: 3}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.