每秒通过redux-observable调度一个动作

时间:2019-01-31 09:03:51

标签: react-native rxjs rxjs6 redux-observable

使用普通的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 个答案:

答案 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))
  )),
);