私は個人的なニーズのためにコンソール スクリプトを開発しています。長時間一時停止できるようにする必要がありますが、調査したところ、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)
})()
より詳しい情報:
- Nodejs の Harmony フラグ:詳しくはこちら
- ダウンロード可能なすべての NodeJS バージョン:https://nodejs.org/en/download/releases/