Вы можете использовать оператор rxjs
pipe
для объединения take
и interval
как
counter: number = 0;
items: string[] = ["one", "tow", "three", "four"];
ngOnInit() {
interval(2000)
.pipe(take(this.items.length))
.subscribe(res => {
console.log(console.log(this.items[this.counter++]));
});
}
Редактировать: Вам необходимо создать наблюдаемый поток, используя Observable.create
где вы можете использовать setInterval
для создания наблюдаемых через равные промежутки времени, а в конце вы можете пометить его как завершенный.
После подписки у нас будут отдельные методы, выполняемые после выдачи нового значения и посленаблюдаемое помечено как завершенное
obs: Observable<any>;
counter: number = 0;
items: string[] = ["one", "two", "three", "four"];
ngOnInit() {
this.obs = Observable.create(observer => {
let intervalID = setInterval(() => {
observer.next(this.items[this.counter++]);
if (this.counter >= this.items.length) {
clearInterval(intervalID);
observer.complete();
}
}, 1000);
});
this.obs.subscribe(
res => {
console.log(res);
},
err => {
console.log(`Error: ${err}`);
},
() => {
console.log("complete");
}
);
}
Stackblitz в: https://stackblitz.com/edit/angular-regular-interval-observables-with-complete