Отправка действия каждую секунду с помощью наблюдаемого редукса
С равниной Rxjs
Мне удалось реализовать поведение "обратного отсчета", вызывая метод каждую секунду, как это, пока не осталось больше времени:
const time = 5
var timer$ = Rx.Observable.interval(1000)
timer$
.take(time)
.map((v)=> {
const remaining = time - 1 - v
return remaining;
})
.subscribe((v)=>console.log('Countdown', v))
Теперь с redux-observable
Я хочу реализовать обратный отсчет, при котором я получаю начальное время (например, 5000 секунд) и отправляю действие каждую секунду, пока начальное время не снизится до 0. Пока у меня есть это:
action$.pipe(
ofType(START_COUNTDOWN),
switchMap(() =>
interval(1000)
.map((time) => updateTime(time))),
);
Но я получаю ошибку: Property map does not exist on type Observable<Number>
, Что я не ошибаюсь здесь, потому что я чувствую, что это не должно быть очень трудно сделать это с redux-observable
,
1 ответ
В вашем redux-observable
приложение, которое вы используете более новую версию RxJS (> 6.0), которая поддерживает только операторы с возможностью переноса, в то время как вы пытаетесь использовать старый стиль "патч" (есть также rxjs-compat
пакет для обратной совместимости, но рекомендуется только для поддержки старого кода). Так как начиная с RxJS 6 вы должны использовать только pipe()
:
action$.pipe(
ofType(START_COUNTDOWN),
switchMap(() => interval(1000).pipe(
map((time) => updateTime(time))
)),
);