javascript - 非同期処理 - 非同期 処理 並列 処理 違い




JavaScriptの設定間隔は別のスレッドとして実行されますか? (2)

無限ループに陥った場合のためのフォールバックとしてタイマーを使用したいです。 設定された間隔がこれを行う正しい方法のようです。 しかし、それは私のために働いていません。

私の調査によると、setIntervalはバックグラウンドで別のスレッドで実行する必要があるようですが、わかりません。

なぜこのような行動が起きているのですか? そして、どうやってこれを解決できますか?

var time = 0;
window.setInterval(function(){time++;}, 1000);
while (true) {
    //stuff done
    if (time >= 5) {
        break;
    }
}

zerkmsは正しい答えを持っています。 しかし、 Webワーカーは、クライアントサイドのJavaScriptからマルチスレッド風の動作を得るための手段であると付け加えます。

var worker = new Worker('my_task.js');
worker.onmessage = function(event) {
 console.log("Called back by the worker!\n");
};

ワーカーはバックグラウンドスレッドで実行され、メッセージを交換したりイベントを購読したりできます。 それはかなり気が利いています。


すでに述べたように、 setIntervalへのコールバックは無限ループが終了するまで実行されません。 Webワーカーを使用せずに、達成しようとしていることを実行するには、ループ自体から時間をチェックする必要があります。

var start = Date.now();
while((Date.now() - start) < 5000){
  ...
}






javascript