Как сбросить наблюдаемые с задержкой? - PullRequest
3 голосов
/ 18 октября 2019

Я пытаюсь выяснить, как «сбросить» предыдущую Наблюдаемую, которая имеет задержку. Моя цель такова, что когда я нажимаю кнопку, она запускает действие;в конце этого действия, после ожидания определенного количества времени, действие запускает finalize для сброса значения.

Вот Stackblitz того, что я имею в виду.

Если я нажму «Сохранить новое событие», появится номер. Через 3 секунды номер исчезнет. Проблема в том, что если я щелкну по нему один раз, запустится задержка, но затем, если я щелкну по нему еще раз через 1 секунду, отобразится новое число, но затем, через 2 секунды, число исчезнет с момента появления первых Наблюдаемых наборов {saveSuccess: null}.

Есть ли какая-то магия RXJS, которая может выполнить то, что я хочу сделать?

1 Ответ

6 голосов
/ 18 октября 2019

Да, действительно, есть некоторая магия , которая будет отменять предыдущую задержку при каждом новом клике (я думаю, это то, что вам нужно)

Вам нужно использовать Subjectна уровне класса, и используйте next по теме для каждого клика. subject должен быть установлен в constructor (или ngOnInit) следующим образом, с операторами tap внутри pipe

this.subject.pipe(
    switchMap(value => {
        return timer(1000).pipe(...)
    }),
    tap(...)
).subscribe()

SwitchMap отменитпредыдущий таймер при каждом последующем щелчке

Примечание: timer с целочисленным значением работает так же, как delay, но сам по себе является наблюдаемым, а не оператором

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...