@fuji9

Как отменить предыдущий for loop внутри switchMap()?

Добрый день!

У меня есть BehaviorSubject'ы - render$, loop$.

this.service.render$
  .pipe(switchMap(this.loop$))
  .subscribe(x => console.log(x))

loop$ = () => new Observable((subscriber) => {
  for(let i = 0, l = 10000; i < l; i++) {
    // Здесь нужен флаг для предыдущей итерации, по которому луп прервался бы, 
    // т.к. пришло новое render$ значение и нету смысла ждать окончания предыдущего лупа
    subscriber.next(i);
  }
  subscriber.complete();
});


С каждым новым значением render$, из-за switchMap(), предыдущий loop$ отписывается и подписывается заново. Однако это не отменяет саму for итерацию, типа "break". Возможно ли это и как?

Можете так же продублировать ответ здесь за пойнты! Спасибо!

ПС: Может вместо лупа как-то использовать setInterval() с нулевым delay?
  • Вопрос задан
  • 32 просмотра
Решения вопроса 1
@fuji9 Автор вопроса
Моё решение:

this.service.render$
  .pipe(switchMap(() => from(10000)))
  .subscribe(x => console.log(x))

Примерно то же самое с более сложными типами. У меня объект, но я думаю смогу обойтись и с from(Object.entries(myObject)).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы