为什么setTimeout比它应该更早发射?

时间:2014-09-02 00:35:41

标签: javascript node.js serverside-javascript

我有一些node.js代码:

var start = Date.now();

setTimeout(function() {
    console.log(Date.now() - start);
    for (var i = 0; i < 100000; i++) {
    }
}, 1000);

setTimeout(function() {
    console.log(Date.now() - start);
}, 2000);

当我在我的机器上运行它时会发生奇怪的事情。我得到的时间是介于970和980之间,介于1970年到1980年之间。为什么我得到的时间早于超时时间?

2 个答案:

答案 0 :(得分:2)

我相信你因为Date精确度而遇到这些问题。它可能因平台和浏览器而异。

Here是关于日期准确性的更详细的解读。

在某些平台上有更多高精度计时器available,但您经常需要做一些混合和匹配(检测可用的内容并相应地回归)。

答案 1 :(得分:1)

来自node.js setTimeOut documentation

  

请务必注意,您的回调可能不会被调用   在完全延迟毫秒 - Node.js不保证   回调将触发的确切时间,也不是排序   事情会发生。回调将尽可能接近   到指定的时间。

但是,有一个纳米管可以使用:
https://www.npmjs.org/package/nanotimer

一些相关问题:

但是,我认为早期+/- 30ms有点多(与大多数浏览器相比我已经玩过,它们通常不会超过10毫秒以后(只要cpu没有达到最大值,即))。