Ich weiß nicht, was der Zweck ist, aber Sie würden
function count() {
while(keepGoing) {
i = i+1;
}
}
für eine Weile zu unterbrechen, haben eine Chance zu geben für keepGoing
an einem anderen Ort zu ändern, die inzwischen läuft. Auch Sie nie tun:
while(keepGoing) {
i = i+1;
}
Sie sind völlig den Faden für alles blockiert ... Sie müssen Ihre Funktion die Arbeit in kleine Stücke teilen und setTimeout oder setInterval verwenden Sie es in kleinen Chargen zu laufen, so etwas wie die folgenden, während in der Nähe, was Sie wollen können:
var piece_n=0;
var keepGoing = true;
var interval_id = setInterval(function() {
if(keepGoing){
//do_a_short_piece_of_work(piece_n);
piece_n++;
}else{
clearInterval(interval_id);
}
},500); //ticking every half second
setTimeout(function() { keepGoing = false; }, 10000); //run for a small bit more than 10 to 10.5 seconds + do_a_short_piece_of_work() execution time
Wenn Sie genau den Rest 10 Sekunden benötigen, ohne hungern müssen Sie in einer Reihe von setTimeout anzupassen, und Sie werden ein wenig im Voraus wissen müssen (mehr als das nächste Häkchen), damit Sie das letzte setTimeo einstellen können ut zum genauen Zeitpunkt (aktuelles Datum und gespeichertes Anfangsdatum). Alles kann in kleinere Stücke unterteilt werden, wie Anweisungen für eine CPU :)