Я подписавшись на BehaviorSubjectroutes$
, который излучает массив направленийНаблюдаемые итерация событие завершения
например ['left', 'top', 'left']
Затем я хочу регистрировать каждый элемент этого массива с задержкой в 200 мс, теперь после того, как весь элемент зарегистрирован, я хочу зарегистрировать route finished
.
Я пробовал все события ()=>{}
и finally()
оператора, но оба они не срабатывают, так как routes$
все еще жив и может испускать новые направления.
/** Stream recent directions */
this.route$.switchMap(() => {
return Observable
.interval(200)
.timeInterval()
.take(this.route$.getValue().length)
}).subscribe(
(v) => {
if (v.value === this.route$.getValue().length) return;
let i = v.value;
this.moveStep(this.route$.getValue()[i]);
}
);
В настоящее время я использую этот метод обхода
.subscribe(
(v) => {
if (v.value === this.route$.getValue().length) return;
let i = v.value;
this.moveStep(this.route$.getValue()[i]);
/** Check if it is the last iteration */
if(i + 1 === this.route$.getValue().length){
console.log('route finished');
this.state = PlayerState.Idle;
}
}
);
Есть собственный способ для достижения этой цели в наблюдаемой?
Не могли бы вы переписать это для ясности? – Asti