RxJs принимают первое событие каждые x секунд

Я вижу много сообщений об ограничении скорости без потерь, но это не совсем то, что я пытаюсь сделать. У меня есть событие, которое срабатывает один раз при каждом http-вызове в моем приложении angular 9, которое запускает другое событие, которое делает отдельный http-вызов. Однако я не хочу, чтобы этот вызов происходил постоянно с каждым отдельным событием, я просто хочу, чтобы он срабатывал один раз, как каждые x секунд, но только при активном выполнении http-вызовов. Меня не волнует потеря промежуточных событий. Я играл с различными комбинациями takeUntil, interval и некоторыми другими вещами, но на самом деле ничего не работает так, как я хочу. Надеялся, что у вас, умных людей, будут какие-то предложения.

Можете ли вы опубликовать код, который вы пробовали?

Niladri 18.12.2020 18:12

Я не сохранил ничего из этого, извините, так как ничего из этого не сработало. Я как раз на той стадии, когда я лихорадочно ищу в Интернете, пытаясь собрать воедино похожие примеры или найти кого-то, кто пытался сделать что-то подобное.

Brandon 18.12.2020 18:14

Я думаю, что, возможно, выхлоп / выхлопная карта будет способом сделать это ...

Brandon 18.12.2020 18:25
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
Изучение Angular 1#
Изучение Angular 1#
Здравствуйте, друзья, как дела, надеюсь, у вас все хорошо.
0
3
479
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это с помощью exhaustMap и искусственно расширенной внутренней наблюдаемой. Мы можем искусственно продлить вызов, объединив его с беззвучным таймером. Таким образом, внутренняя наблюдаемая завершается только тогда, когда завершается последняя из объединенных наблюдаемых. При этом значения из source$ игнорируются.

В этом примере мы перестаем игнорировать источник $ каждые 10 секунд (если внутренний наблюдаемый объект не занимает больше времени, мы продолжаем ждать).

Это может выглядеть так:

const tenSeconds = 10000;

// source$ emits when http calls being made
source$.pipe(
  exhaustMap(_ => merge(
    separateHttpCall(),
    timer(tenSeconds).pipe(
      filter(_ => false)
    )
  ))
)

Это работает довольно хорошо, и на самом деле довольно близко к тому, с чего я начал. Я пытался использовать задержку, чтобы сделать это, но это имеет гораздо больше смысла в ретроспективе. Спасибо!

Brandon 18.12.2020 19:18

Другие вопросы по теме