javascript eingestellten Intervall ausgeführt als separater thread?
Ich will, einen timer zu verwenden als fallback, falls ich am Ende in einer Endlosschleife. Es scheint, dass die Intervalle, ist der richtige Weg, dies zu tun. Jedoch, es ist nicht für mich arbeiten.
Aus meiner Forschung, es scheint, wie setInterval laufen sollte in einem separaten thread im hintergrund, aber ich sehe es nicht.
Warum ist dieses Verhalten passiert? Und wie löse ich dieses?
var time = 0;
window.setInterval(function(){time++;}, 1000);
while (true) {
//stuff done
if (time >= 5) {
break;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Browser javascript läuft in einem einzigen thread. Also, wenn Sie etwas, das dauert zu lange - es wird freeze-browser.
Siehe John Resig Artikel für weitere details: http://ejohn.org/blog/how-javascript-timers-work/
Nachdem Sie diesen Artikel Lesen, erhalten Sie, dass Ihre
setInterval
Rückruf in der Warteschlange ausgeführt werden, 1000ms nachdem jetzt aber nur nach dem aktuellen code ist fertig. Es nicht beenden kann, obwohl, weil der Endlosschleife.zerkms hat die richtige Antwort. Aber ich möchte hinzufügen, dass web-worker sind ein Weg, um einige multi-threaded-ish Verhalten von client-side javascript.
Der Arbeiter läuft in einem hintergrund-thread, und Sie können exchange-Nachrichten und-Ereignisse zu abonnieren. Es ist ziemlich raffinierte.
Wurde bereits gesagt -, den Rückruf
setInterval
nicht ausgeführt, bis die Endlosschleife beendet. Zu tun, was Sie zu erreichen versuchen - ohne Verwendung von web-worker - Sie haben zu prüfen, die Zeit von der Schleife selbst: