Bis Async/Await
wenn wir alle X Sekunden, um eine wiederkehrende Sache N mal machen benötigt hatten wir die Wahl zwischen einem for-Schleife, die ein settimeout
oder verwenden, um einen Wrapper um setinterval
wickelt die Anzahl der Male zu zählen, es ausgeführt wurde und klar es.Ist es in Ordnung, setTimeout in einer for-Schleife zu erwarten?
Aber mit Asynchron erwarten ist es in Ordnung, dies zu tun:
async function newFashion() {
for (let i = 0; i < 10; i++) {
console.log(i);
await sleep(1000);
}
console.log("Finish");
}
newFashion(); // 0 1 2 3 4 5 6 7 8 9 Finish
function oldFashion() {
for (let i = 0; i < 10; i++) {
setTimeout(() => {
console.log(i);
}, i * 1000);
}
console.log("Finish");
}
oldFashion(); // Finish 0 1 2 3 4 5 6 7 8 9
function sleep(time) {
return new Promise((resolve) => {
setTimeout(resolve, time);
});
}
Ich weiß, dass die beiden nicht gleich verhalten. oldFashion()
nicht tatsächlich "pausieren" in der Schleife, aber eigentlich die 10 setTimeout()
während iterating aufrufen, so im Grunde füllt er die Ereignisschleife mit 10 setTimeout()
.
newFashion()
verhält sich jedoch so, wie es sein sollte, er hört auf zu iterieren, wenn er auf die wartet, aber ich bin mir nicht sicher, wie genau das funktioniert.
Also was ist besser, füllen die Ereignisschleife mit N setTimeout()
, oder warten aufeinander? Und was passiert eigentlich in newFashion()
?
EDIT: Um etwas genauer zu sein, was ist der Gewinn jede Methode in Bezug auf Leistung? Wenn N klein ist? Wenn N riesig ist?
Ich glaube nicht, dass es Probleme mit Ihrem neuen Code gibt, und ich persönlich finde es viel einfacher zu lesen. – Gerrit0
Persönlich bevorzuge ich 'const delay = time => neues Versprechen (res => setTimeout (res, time)); ';) –
@CodyG. Haha, wir müssen es hier einfach halten;) – Smirow