Ich habe eine Funktion namens "loop" die wiederholt mit setInterval() aufgerufen wird. Innerhalb dieser Funktion brauche ich eine andere Funktion, die "delay()" genannt wird (es muss die exakte Syntax sein).Schlaf innerhalb von setInterval ohne den Browser zu fixieren
So landete ich mit auf den Punkt:
function loop() {
console.log("some code")
delay(100)
console.log("some more code")
delay(100)
}
if (typeof loop != "undefined")
window.loopInterval = setInterval(loop, 1)
function delay(millis) {
var now = Date.now();
while(Date.now() < now + millis){}
}
Das funktioniert ganz gut, aber es friert den Browser richtig bestimmte Änderungen machen es nicht in der Lage zu machen.
Jetzt gibt es eine Möglichkeit, die Verzögerungsfunktion so zu ändern, dass sie einfach den setInterval pausiert?
Wie gesagt, die Syntax mit der Loop- und Delay-Funktion muss intakt bleiben. Und ja, ich habe gute Gründe dafür.
Für alle, die mich nicht glaubte, dass ich in der Tat zu tun haben einen sehr guten Grund, hier gehen Sie: https://github.com/T-vK/LedStripSimulator
-Code für Arduinos geschrieben fast immer verwendet die Schleife() Funktion und Verzögerung() ist auch eine sehr gewöhnliche Sache auf Arduinos, da sie oft nur eine Sache auf einmal machen. Und ein JS-Simulator, dessen Zweck es ist, die Arduino-Syntax so genau wie möglich zu replizieren, benötigt sicherlich eine synchrone Verzögerungsfunktion.
Einfache Antwort: Nein. Erzählen Sie uns nicht, wie Sie etwas erreichen wollen, sagen Sie uns das Problem, das Sie lösen wollen. (Und das Problem, das Sie zu lösen versuchen, ist nicht "Wie kann ich das schaffen", wenn es einfach nicht von Natur aus wie Browser entworfen werden können) –
Nein. Kann es nicht mit Ihrer "exakten Syntax" tun – rgthree
Das ist nicht der richtige Weg, um eine Verzögerung zu verursachen. Das wird natürlich die Skriptausführung anhalten, bis die while-Schleife beendet ist. Sie können 'setTimeout' verwenden, das das Problem auf sehr elegante Weise lösen sollte. –