使用普通的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
完成此任务并不难。
答案 0 :(得分:1)
在您的redux-observable
应用中,您正在使用较新版本的RxJS(> 6.0),该版本仅在尝试使用旧的“补丁”样式时仅支持可插值运算符(还有rxjs-compat
包以实现向后兼容性,但建议仅支持较早的代码)。因此,从RxJS 6开始,您应该只使用pipe()
:
action$.pipe(
ofType(START_COUNTDOWN),
switchMap(() => interval(1000).pipe(
map((time) => updateTime(time))
)),
);