sleep() の JavaScript バージョンは何ですか? 質問する

sleep() の JavaScript バージョンは何ですか? 質問する

sleepJavaScript で次の関数よりも優れた設計方法はありますかpausecomp(ここから引用)?

function pausecomp(millis)
{
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < millis);
}

これは重複ではありませんJavaScript のスリープ - アクション間の遅延;コードの実行前に遅延させるのではなく、関数の途中で実際にスリープさせたいのです。

ベストアンサー1

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));

またはTypescriptの場合:

const sleep = (ms: number) => 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();

ご了承ください、

  1. awaitasyncキーワードで始まる関数内、またはスクリプトの最上位レベルでのみ実行できます。環境の増加
  2. await現在のasync関数を一時停止するだけです。つまり、スクリプトの残りの部分の実行をブロックしないということです。ほとんどの場合、これが望ましいことです。ブロッキング構造が必要な場合は、この答え使用してAtomics.waitただし、ほとんどのブラウザではブラウザのメインスレッド上では許可されないことに注意してください。

この「スリープ」関数の作成には、次の 2 つの新しい JavaScript 機能 (2017 年現在) が役立ちました。

互換性

何らかの理由でNode 7より古いバージョン(2017年に寿命を迎える)、または古いブラウザを対象としている場合でも、async/はawait引き続き使用できます。バベル(ツールはトランスパイルJavaScript + 新しい機能を単純な古いJavaScriptに統合したtransform-async-to-generatorプラグイン。

おすすめ記事