角度$timeout持续时间是否有限制



我正在调用两个$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。

最新更新