Node.js (JavaScript) で待機するにはどうすればいいですか? 一定時間一時停止する必要があります 質問する

Node.js (JavaScript) で待機するにはどうすればいいですか? 一定時間一時停止する必要があります 質問する

私は個人的なニーズのためにコンソール スクリプトを開発しています。長時間一時停止できるようにする必要がありますが、調査したところ、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 はこれを認識しません。

この長時間の休止をどのように実現できるでしょうか?

ベストアンサー1

2021年1月更新--experimental-repl-await:フラグを使用してNode REPLインタラクティブでも実行できます

$ 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 プラグインをインストールせずにそのまま 使用するには 、 --harmony フラグを使用して node-v7 または node-v8 を使用する必要があります。

2019 年 6 月更新:最新バージョンの NodeJS を使用すると、すぐに使用できます。コマンド ライン引数を指定する必要はありません。現在は Google Chrome でもサポートされています。

2020年5月更新:awaitまもなく、非同期関数の外部でも構文を使用できるようになります。この例のようにトップレベルで

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

提案は第3段階にあるwebpack 5 (アルファ版) を使えば今すぐ使えます。

それが利用可能になる前に、スクリプトのトップレベルを自己呼び出しの非同期関数でラップするだけです。

(async function() {
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
console.log(1)
await sleep(1000)
console.log(2)
})()

より詳しい情報:

おすすめ記事