typescript - Angular 4 setTimeout venter ikke
Jeg lager en Angular 4-app med TypeScript.
Jeg har en funksjon som må kjøres hvert 10. sekund til en spesifisert stoppbetingelse. Jeg laget en løkke med noe testkode som bruker setTimeout for å se om det ville fungere.
Min testkode:
public run() {
let i = 0;
while (i < 4) {
setTimeout(this.timer,3000);
i++;
}
}
public timer(){
console.log("done")
}
Men dette ser ut til å vente i 3 sekunder, eller så er nettleseren bare treg... og så skriver den ut 'ferdig' 4 ganger. Så koden fungerer ikke. Gjør jeg dette feil, eller finnes det andre muligheter for å gjøre denne typen ting?
Svar #1
Siden du bruker Angular, kan du sannsynligvis gjøre dette på en mye enklere måte ved å bruke takeWhile:
Observable.interval(10000)
.takeWhile(() => !stopCondition)
.subscribe(i => {
// This will be called every 10 seconds until `stopCondition` flag is set to true
})
Svar #2
Ja, du gjør det feil: du har en løkke som sier 4 ganger på rad å kjøre timer() 3 sekunder senere, fra nå.
For å gjøre det du vil, må du endre tidspunktet for neste timer hver gang timer() blir kalt, eller, enklere, bruke setInterval():
let count = 0;
const interval = window.setInterval(() => {
this.timer();
count++;
if (count >= 4) {
window.clearInterval(interval);
}
}, 3000);
Merk at siden du bruker Angular, vil det være mye enklere å bruke observables:
Observable.interval(3000).take(4).subscribe(() => this.timer());
