検索

ホームページ  >  に質問  >  本文

JavaScript ループで遅延実行を実装するにはどうすればよいですか?

<p><code>while</code> ループに遅延/スリープを追加したいです: </p> <p>次のことを試しました: </p> <pre class="brush:php;toolbar:false;">alert('hi'); for(var start = 1; start <10; start ) { setTimeout(関数() { アラート('こんにちは'); }, 3000); }</pre> <p>最初のケースのみが正しいです。<code>alert('hi')</code> を表示した後、3 秒待ってから、<code>alert('hello' )< を表示します。 /code> ですが、その後 <code>alert('hello')</code> が繰り返し表示されます。 </p> <p>私が望むのは、<code>alert('hello')</code> を表示してから 3 秒後、<code>alert('hello')<を表示するまでさらに 3 秒待つ必要があるということです。 ;/code> など。 </p>
P粉680000555P粉680000555467日前493

全員に返信(2)返信します

  • P粉718165540

    P粉7181655402023-08-21 11:04:40

    ES7 以降、waitloop:

    を実行するより良い方法があります。 リーリー

    エンジンが await セクションに到達すると、タイムアウトを設定し、async 関数 の実行を一時停止します。その後、タイムアウトが完了すると、その時点で実行が続行されます。これは、(1) ネストされたループ、(2) 条件、(3) ネストされた関数を延期できるため、非常に便利です。

    リーリー

    MDN の参考資料

    ES7 は現在 NodeJS と最新のブラウザーでサポートされていますが、どこでも実行できるように

    BabelJS でトランスパイルすることもできます。

    返事
    0
  • P粉659518294

    P粉6595182942023-08-21 10:19:20

    setTimeout() この関数はノンブロッキングで、すぐに戻ります。したがって、ループは非常に高速に反復され、3 秒のタイムアウトが立て続けにトリガーされます。そのため、最初のアラートは 3 秒後にポップアップし、他のすべてのアラートは遅延なく継続して表示されます。

    次のようなコードを使用するとよいでしょう:

    リーリー

    返事
    0
  • キャンセル返事