小编典典

我如何在 Node.js (JavaScript) 中等待?l 需要暂停一段时间

all

我正在为个人需求开发一个控制台脚本。我需要能够暂停很长时间,但是,根据我的研究,Node.js
无法按要求停止。一段时间后,阅读用户信息变得越来越困难......我看到了一些代码,但我相信他们必须在其中包含其他代码才能工作,例如:

    setTimeout(function() {
    }, 3000);

但是,我需要这行代码之后的所有内容才能在一段时间后执行。

例如,

    // start of code
    console.log('Welcome to my console,');

    some-wait-code-here-for-ten-seconds...

    console.log('Blah blah blah blah extra-blah');
    // end of code

我也见过类似的东西

    yield sleep(2000);

但是 Node.js 不承认这一点。

我怎样才能实现这种延长的暂停?


阅读 166

收藏
2022-03-07

共1个答案

小编典典

2021 年 1 月更新 :您甚至可以在 Node REPL 交互式使用--experimental-repl-await标志中进行操作

$ node --experimental-repl-await
> const delay = ms => new Promise(resolve => setTimeout(resolve, ms))
> await delay(1000) /// waiting 1 second.

老问题的新答案。今天( 2017 年 1月,2019 年 6
月)要容易得多。您可以使用async/await语法。例如:

async function init() {
  console.log(1);
  await sleep(1000);
  console.log(2);
}

function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

要在不安装和插件的情况下使用async/await开箱即用,您必须使用 node-v7 或 node-v8,使用--harmony标志。

2019 年 6 月更新: 通过使用最新版本的 NodeJS,您可以立即使用它。无需提供命令行参数。今天甚至谷歌浏览器也支持它。

2020 年 5 月更新: 很快您将能够在await异步函数之外使用语法。在这个例子中的顶层

await sleep(1000)
function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

该提案处于第 3 阶段。您现在可以通过使用
webpack 5 (alpha) 来使用它,

更多信息:

2022-03-07