使用 redux-observable 每秒调度一个动作
Dispatching an action every second with redux-observable
对于普通的 Rxjs
,我设法通过像这样每秒调用一个方法来实现 "countdown" 行为,直到没有更多时间剩余:
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
.
完成这个应该不是很难
在您的 redux-observable
应用中,您使用的是较新版本的 RxJS (> 6.0),它仅支持 pipable 运算符,而您正在尝试使用旧的 "patch" 样式(还有 rxjs-compat
包用于向后兼容,但建议仅支持旧代码)。所以从 RxJS 6 开始你应该只使用 pipe()
:
action$.pipe(
ofType(START_COUNTDOWN),
switchMap(() => interval(1000).pipe(
map((time) => updateTime(time))
)),
);
对于普通的 Rxjs
,我设法通过像这样每秒调用一个方法来实现 "countdown" 行为,直到没有更多时间剩余:
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
.
在您的 redux-observable
应用中,您使用的是较新版本的 RxJS (> 6.0),它仅支持 pipable 运算符,而您正在尝试使用旧的 "patch" 样式(还有 rxjs-compat
包用于向后兼容,但建议仅支持旧代码)。所以从 RxJS 6 开始你应该只使用 pipe()
:
action$.pipe(
ofType(START_COUNTDOWN),
switchMap(() => interval(1000).pipe(
map((time) => updateTime(time))
)),
);