1. ホーム
  2. javascript

[解決済み] Node.js (JavaScript)で待つには?

2022-03-16 12:50:39

質問

個人的な必要性からコンソールスクリプトを開発しています。長時間の一時停止が必要なのですが、調べたところ、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はこれを認識しない。

どうすればこの拡張ポーズを実現できますか?

どのように解決するのですか?

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の最新バージョンを使用することで、そのまま使用することができます。コマンドライン引数の指定は不要です。Google Chromeでも現在サポートされています。

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

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

提案はステージ3である . webpack 5 (alpha)を使用すれば、今日から使えます。

詳細はこちら