Die Simulation einer zeitlich asynchronen Aufruf
Ich versuche zu simulieren, die eine asynchrone callback, das etwas tut, in eine festgelegte Anzahl von Sekunden. Ich will, dass diese alle log zur gleichen Zeit, 3 Sekunden aus, wenn Sie ausgelöst werden. Recht jetzt, Sie melden sich nacheinander 3 Sekunden nach jedem anderen. Die sleep-Funktionen sind blockiert das ganze Skript ausgeführt wird. Irgendeine Idee warum?
function sleep(delay) {
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
}
var same = function(string, callback){
new sleep(3000);
return callback(string);
}
same("same1", function(string){
console.log(string);
});
same("same2", function(string){
console.log(string);
});
same("same3", function(string){
console.log(string);
});
- developer.mozilla.org/en-US/docs/Web/API/Window.setTimeout
- "Irgendeine Idee, warum?" Da JavaScript ist single-threaded, und Sie werden ständig läuft die Schleife.
- Javascript ist single-threaded. Das kannst du nicht tun.
- möglich, Duplikat der gibt es eine Möglichkeit die Einführung einer Verzögerung in javascript?
- die single-Thread-ja!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
setTimeout()
planen etwas für die Zukunft.Auch
setTimeout()
ist async, Ihr looping nicht.Hinweis: Sie können nicht einen Wert zurückgeben, aus dem asynchronen callback-weil es async. Die Funktion
same()
abgeschlossen, und es gibt lange, bevor der Rückruf tatsächlich aufgerufen wird.Mit ES6, können Sie die folgende Technik beruht auf einer helper-delay-Funktion: