我正在使用angularjs,特别是$timeout服务(setTimeout上的包装器)。 它的工作原理如下:
angular.module('MyApp').controller('MyController', ['$scope', '$timeout',
function($scope, $timeout) {
$scope.millisecondsLater = 3000000000;
$timeout(function(){
console.log('it's been ' + $scope.millisecondsLater + ' later');
}, $scope.millisecondsLater);
}
]);
当此控制器实例化时,超时中的函数将立即被调用。 但是如果我设置:
$scope.millisecondsLater = 2000000000;
它似乎没有像预期的那样被调用,因为这是(从现在起 2000000 秒)。 如果我设置 $scope.毫秒稍后 = 2000,则回调会在 2 秒后调用。
似乎$timeout的最大值介于 30000000000 和 2000000000 之间,而不是从不调用回调,它会立即被调用(至少对于 chrome)。 以前有人遇到过这种情况吗?您如何在没有一堆硬编码的情况下干净地解决它,如果每当使用超时时<2000000000 次检查?
提前感谢,任何见解将不胜感激!
我不认为这个问题是 Angular 的$timeout
服务所特有的,而是存在于普通 JavaScript 中的setTimeout
函数(因为无论如何$timeout
有效地包装setTimeout
)。
setTimeout
可以取的最大值是 32 位整数(即 2147483647)。任何超出范围的事情显然都会导致意想不到的行为。也许将您的延迟分解成更小的块?