使用$ timeout计算毫秒数不准确

时间:2015-01-18 01:21:33

标签: angularjs

我正在尝试使用$ timeout(或$ interval),并且从文档和网上的大量示例计算,以1秒为增量很容易:

var counter = 0;
$timeout(timer(), 1000);

var timer = function() {
    counter++;
    $timeout(timer(), 1000);
};

然而,以1毫秒为增量调用$ timeout时,时间不准确。以下是一个示例:http://jsfiddle.net/eh8o9s28/

如果您在示例中运行计时器它看起来没问题,但是与秒表相比,大约20秒后Angular时间大约是2秒错误,并且它继续偏离那里。 (请注意,如果将增量更改为1000,则时间非常准确。)

有什么想法吗?我想知道毫秒增量是否太快而$digest周期跟不上?

1 个答案:

答案 0 :(得分:1)

$ timeout是jus的一个封装器,用于JS中的setTimeout定时函数是非常不可靠的,它们至多是近似的,它们的精度取决于许多因素,如操作系统,体系结构,CPU负载,甚至你的脚本的构建情况,所以如果需要高精度,你不应该依靠$ timeout或$ interval进行时间关键操作