var td = {
setTimeout: function(callback, ms){
var dt = new Date();
var i = dt.getTime(), future = i+ms;
while(i<=future){
if(i === future){
callback();
}
// i = dt.getTime();
i++;
}
}
};
td.setTimeout(function(){
console.log("Hello"); // executes immediately
}, 3000);
Das Problem bei diesem Ansatz ist, dass am Ende des während der Block I den Wert von i
-i + 1
bin Einstellung, die ich denke, sollte auf dem aktuellen Zeitstempel gesetzt werden (dt.getTime()
) Auf diese Weise kann future
(ein Zeitstempelwert, bei dem die Callback-Funktion ausgeführt werden soll) mit dem aktuellen Zeitstempel verglichen werden, der der Wert i
ist.Erstellen von benutzerdefinierten Funktion setTimeout()
Aber wenn ich i++
Kommentar und Kommentar- diese Zeile:
i = dt.getTime();
und das Skript ausführen, der Browser friert ein. Gibt es eine Möglichkeit, eine setTimout()
Methode zu erstellen, die dem gleichen Zweck wie window.setTimeout()
dienen würde?
Es ist nicht wirklich möglich, 'setTimeout' in Benutzer Land Code zu simulieren, da JavaScript alle APIs belichten nicht direkt Funktionen der Ereigniswarteschlange hinzuzufügen. Anyways ..., was Ihre Frage eigentlich ist? –
Sie sollte verstehen, dass, selbst wenn Sie die Endlosschleife Problem beheben, die Braue ser wird immer noch gesperrt. Das liegt daran, dass die Schleife verhindert, dass irgendetwas anderes ausgeführt wird, bis es beendet wird. –
Werfen Sie einen Blick auf [** diese Antwort **] (https://Stackoverflow.com/a/41814108/6647153) einer mehr oder weniger similar Frage. –