javascript - Muuta aikakatkaisun kestoa
Rakennan Angular 6 -sovellusta, jossa minulla on useita kohteita ja jokaisella kohteella on oma asetuksensa. Jokaiselle kohteelle olen määrittänyt keston, kuinka kauan tämän kohteen on oltava näkyvissä.
Loin tämän, mutta olen kiinnostunut siitä, voidaanko tämä kirjoittaa rxjs:llä tai onko ehkä olemassa yksinkertaisempi ratkaisu.
const timer = () => {
this.counter++;
this.currentItem = this.items[this.counter % this.items.length];
setTimeout(timer, this.currentItem.duration);
};
setTimeout(timer, this.currentItem.duration);
Vastaus #1
RxJS 6:n kanssa voit tehdä jotain tällaista
from(items)
.pipe(
concatMap(item => of(null) // Wait until the previous inner observable completes
.pipe(
delay(item.duration), // Delay emission after this value
ignoreElements(),
startWith(item),
)
),
repeat(),
)
.subscribe(console.log);
Katso live-demo: https://stackblitz.com/edit/rxjs6-demo?file=index.ts
