我正在调用两个$timeout函数,一个延迟为 1000,另一个延迟为 3000000000。较长的延迟总是会立即触发。这是功能的限制,还是我的错误?
更奇怪的是,10000000000并不一定会导致错误,因为30000000000
angular.module('app', [])
.controller('FrameController', ['$injector', '$timeout',
function($injector, $timeout) {
var liveTimers = [];
function setExpiryTime(timer, timeRemaining) {
if (liveTimers[timer]) {
cancel(liveTimers[timer]);
delete liveTimers[timer];
}
liveTimers[timer] = $timeout(function() {
alert(timer + " timer expired")
console.log(timer + " expired");
delete liveTimers[timer];
}, timeRemaining);
}
setExpiryTime('first', 1000);
setExpiryTime('second', 100000000000);
setExpiryTime('third', 30000000000);
}
]);
setTimeout(function() {
angular.bootstrap(document.getElementById('body'), ['app']);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div id="body">
<div ng-controller="FrameController">
</div>
</div>
我的猜测是 30000000000 超出了 int 内存。这是一个带有您的代码的 plunker,我可以接近
setExpiryTime('third', 19300000000);
没有第三个计时器过期。
这大约是 2^34。