首页 > 解决方案 > timer/promises.setTimeout 延迟不适用于功能

问题描述

我是 Node v16 的新手,看起来我之前在 Node v13 中所做的事情由于这个额外的 import 语句而不再起作用?我试图将调用此函数延迟 1 分钟,但是当我运行此函数时,它似乎会一遍又一遍地立即调用该函数或从不执行。如何恢复我的 1 分钟延迟?我尝试了以下所有方法:

setTimeout((1 * 60 * 1000), doSomething());

setTimeout(doSomething(), (1 * 60 * 1000));

setTimeout(() => { doSomething() }, 1 * 60 * 1000); (这个从来没有执行过)

setTimeout(doSomething, (1 * 60 * 1000)); (这个从来没有执行过)

注意我在这里也使用了 Node v16 的 import 语句:

const { setTimeout, } = require('timers/promises');

并且因为这个原因,打电话await setTimeout(4000);似乎工作正常

我确定这是因为 timers/promises.setTimeout 与 setTimeout 不同,但我不明白如何在代码中同时使用这两者?

我希望能够在我的脚本中同时使用这两个东西。

标签: javascriptnode.js

解决方案


您可以同时使用:

const { setTimeout: setTimeoutPromiseBased } = require('timers/promises');

setTimeout(function() {
  console.log('Hello, traditional world');
}, 1000);
(async function() {
  await setTimeoutPromiseBased(2000);
  console.log('Hello, promisified world');
})();

上面使用别名语法进行解构。否则,您最终会用启用承诺的版本覆盖全局“setTimeout”。


推荐阅读