[解決済み】JavaScript版sleep()とは?)
2022-03-18 17:06:49
質問
を設計する良い方法はありますか?
sleep
をJavaScriptで書くと、以下のようになります。
pausecomp
関数 (
ここから引用
)?
function pausecomp(millis)
{
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);
}
と重複することはありません。 Sleep in JavaScript - アクション間の遅延 が欲しいのですが。 リアルスリープ を関数の途中で実行し、コードの一部が実行される前に遅延させることはありません。
解決方法は?
2017年~2021年アップデート
この質問がされた2009年以降、JavaScriptは大きく進化しました。他のすべての回答は、今では時代遅れか、過度に複雑になっています。以下は現在のベストプラクティスです。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
あるいはワンライナーとして。
await new Promise(r => setTimeout(r, 2000));
または
const sleep = ms => new Promise(r => setTimeout(r, ms));
として使用します。
await sleep(<duration>);
デモの様子
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function demo() {
for (let i = 0; i < 5; i++) {
console.log(`Waiting ${i} seconds...`);
await sleep(i * 1000);
}
console.log('Done');
}
demo();
注意してください。
-
await
が接頭辞としてつく関数の中でしか実行できません。async
キーワード、またはスクリプトのトップレベルの 増加する環境 . -
await
を一時停止するだけで、現在のasync
関数を使用します。つまり、スクリプトの残りの部分の実行をブロックすることはなく、ほとんどの場合に必要なものです。ブロックする構成が必要な場合は、以下を参照してください。 この答え を使ってAtomics
.wait
しかし、ほとんどのブラウザは、ブラウザのメインスレッドでは許可しないことに注意してください。
この"sleep"関数の記述には、JavaScriptの2つの新機能(2017年現在)が役立っています。
- ES2015のネイティブ機能であるプロミス (別名:ES6)です。また 矢印関数 を、sleep 関数の定義に追加しました。
-
は、その
async/await
機能は、プロミスの解決(解決または拒否)を明示的に待つことを可能にします。
互換性
- プロミスはサポートされています Node v0.12+ では と ブラウザで広くサポートされている IEを除く
-
async
/await
はV8に上陸し Chrome 55以降、デフォルトで有効 (2016年12月リリース)- 着弾 2016年10月にNode 7で
- を上陸させ、さらに 2016年11月にFirefox Nightlyで
何らかの理由で7より古いNodeを使用している場合(この時点で
2017年の終息
)、または古いブラウザを対象としています。
async
/
await
を経由して使用することができます。
バベル
(するツール)。
トランスパイル
JavaScript + 新機能を普通のJavaScriptに変換する)、および
transform-async-to-generator
プラグインを使用します。
関連
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み] ローカルファイルを開くことができません - Chrome: ローカルリソースのロードが許可されていません
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】SyntaxError: 'import' と 'export' は 'sourceType: module' とだけ表示されるかもしれない - Gulp
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み】module.exports "モジュールが定義されていません"
-
[解決済み] JavaScriptのスリープ/続行前の待ち時間[重複]について
-
[解決済み】JavaScriptにsleep関数はありますか?[重複している]
-
[解決済み】JavaのThread.sleep()に相当するJavaScriptは何ですか?[重複しています]。
-
[解決済み】JavaScriptにSleep/Pause/Waitの関数はあるのか?[重複しています]