小编Bla*_*ory的帖子

setTimeout 提前调用函数

我的库有基于实时的测试用例,我注意到测试会随机失败并出现 1 毫秒的错误:

expect(received).toBeGreaterThanOrEqual(expected)

    Expected: >= 1000
    Received:    999
Run Code Online (Sandbox Code Playgroud)

这似乎是由于 setTimeout 过早地调用了该函数。

所以我写了一个单独的测试脚本:

let last = Date.now()

setTimeout(next, 1000)

function next() {
  if (Date.now() - last < 1000) process.exit(1)
  last = Date.now()
  setTimeout(next, 1000)
}
Run Code Online (Sandbox Code Playgroud)

在Node.js v12.19.0、v14.15.3、v15.4.0上,会随机失败:有时脚本可以继续运行,有时脚本很快就会退出。这不仅发生在我的本地计算机上,而且发生在 Github 的 CI 服务器上。

我的问题:这是一个错误吗?或者 setTimeout 的某种预期行为?还是Date.now() - time总是需要加1毫秒?

更新:另见https://github.com/nodejs/node/issues/26578

javascript settimeout node.js

5
推荐指数
1
解决办法
212
查看次数

标签 统计

javascript ×1

node.js ×1

settimeout ×1