Node.js Promise setTimeout的解析速度比预期的更快

时间:2019-03-07 01:29:34

标签: javascript node.js

我在Node.js中有以下代码。

const timeout = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

我正在尝试通过以下测试来测试此代码:

it("Should wait for given time before resolving", async () => {
    const MS = 100;
    const start = process.hrtime();

    await timeout(MS);

    const diff = process.hrtime(start);
    expect(((diff[0] * NS_PER_SEC) + diff[1]) / 1000000).to.at.least(MS);
});

问题有时(很少),此测试失败:

Should wait for given time before resolving:

  AssertionError: expected 99.595337 to be at least 100
  + expected - actual

  -99.595337
  +100

很显然,这是Node.js或某些类型的计时问题。如果可以的话,我希望await timeout(MS);花费比MS稍长的时间。在任何情况下,我都不希望它花费更少的时间。

导致这种情况发生的JavaScript / Node.js内部是什么?

这发生在运行Node.js版本8.15.1的macOS 10.14.3上。

0 个答案:

没有答案