1. ホーム
  2. javascript

[解決済み] ジャバスクリプトにディレイを入れる

2023-07-26 02:59:04

質問

Javascriptのコードに100ミリ秒程度の遅延を加える必要があるのですが、そのために setTimeout の関数を使いたくないのです。 window オブジェクトを使用し、ビジーループを使用したくありません。 どなたかご提案いただけないでしょうか?

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

残念ながら setTimeout() は唯一の 信頼できる の方法(唯一の方法ではなく、唯一の 信頼できる 方法) で、UI をブロックすることなくスクリプトの実行を一時停止することができます。

これを書く代わりに、実際に使うのはそんなに難しくない。

var x = 1;

// Place mysterious code that blocks the thread for 100 ms.

x = x * 3 + 2;
var y = x / 2;

を使う場合 setTimeout() を使ってこのように書き換えます。

var x = 1;
var y = null; // To keep under proper scope

setTimeout(function() {
    x = x * 3 + 2;
    y = x / 2;
}, 100);

を使用することは理解しています。 setTimeout() を使うことは、望ましい sleep() という関数がありますが、残念ながら後者は存在しません。そのような関数を実装しようとすると、多くの回避策が存在します。ビジーループを使用するものもあります。

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

を使って XMLHttpRequest をサーバスクリプトに結びつけ、一定時間スリープさせてから結果を返す。 .

残念ながら、これらは回避策であり、他の問題 (ブラウザのフリーズなど) を引き起こす可能性があります。単純に推奨される方法、すなわち setTimeout() ).