javascript - Zahl von 1 bis 10 alle 2 Sekunden ausgeben
Ich möchte eine Zahl nach jeder n Anzahl von Sekunden ausdrucken und basierend auf einigen Bedingungen ändere ich den Timer sowie stoppe die Druckfunktion. Ich habe es so gemacht --
var myfunc = {
value : 1,
running : false,
timer : 1000,
start : function(){
this.running = true;
clearInterval(this.timeout);
this.timeout = setTimeout(function() {
myfunc.execute(myfunc);
}, myfunc.timer);
},
execute : function(){
if(!this.running) return false;
console.log( 'Currently at -- ' + (this.value++) );
if (this.value > 5 ){
this.changetiming();
}
if (this.value > 10 ){
this.stop();
return;
}else{
this.start();
}
},
changetiming : function(){
this.timer = 3000;
},
stop : function(){
this.running = false;
clearTimeout(this.timeout);
}
};
myfunc.start();
Jetzt möchte ich wissen, was mit folgendem Code nicht stimmt --
for(var i = 0; i <= 10; i++){
print(i);
}
function print(i){
setTimeout(function(){
console.log(i)
},2000);
}
Antwort #1
Hier ist der richtige Weg und der einfache Weg, dies in ES6+ zu tun:
const printNumbersForEvery2Sec = (n)=>{
for (let i = 1; i <= n; i++) {
setTimeout( () =>{
console.log(i)
}, i * 2000)
}
}
printNumbersForEvery2Sec(10);indem i multipliziert wird, soll jeder setTimeout() jeweils um 2 bis 20 Sekunden verzögert werden (2000 x 1, 2000 x 2 …).
Antwort #2
Ich bin mir ziemlich sicher, dass die Frage „Warum dieser JavaScript-Code
for (var i = 0; i <= 10; i++){
print(i);
}
function print(i) {
setTimeout(function(){
console.log(i)
},2000);
}
„Drucken Sie die Werte 1 bis 10 auf einmal aus, nachdem 2 Sekunden vergangen sind?“ wurde schon zuvor gefragt.
Es ist ein häufiger Fehler.
Was du tust, ist, dass du print 10 Mal aufrufst. Jeder Aufruf von print dauert nur wenige Mikrosekunden. Warum? Weil er einfach setTimeout aufruft. Die Ausführung von setTimeout dauert nur wenige Mikrosekunden. Alles, was der Aufruf tut, ist, etwas für die Zukunft einzuplanen. Also hast du innerhalb weniger Mikrosekunden 10 Dinge eingeplant, die etwa 2 Sekunden später stattfinden sollen. Alle Planungen erfolgen ungefähr zur gleichen Zeit. Deshalb finden alle Konsolenprotokolle etwa zur gleichen Zeit statt, zwei Sekunden nachdem du sie eingeplant hast.
Siehe Satapals Kommentar zu deiner Frage für eine schöne Möglichkeit, das zu tun, was du tun möchtest.
