【问题标题】:Dispatching an action every second with redux-observable使用 redux-observable 每秒调度一个动作
【发布时间】:2019-01-31 09:03:51
【问题描述】:

使用普通的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 完成这件事应该不会很难。

【问题讨论】:

  • 在您的redux-observable 应用程序中,您使用的是较新版本的 RxJS (> 6.0),当您尝试使用旧的“补丁”样式时,该版本仅支持 pipable 运算符。所以你应该使用interval(1000).pipe(map(...))
  • @martin 是的,就是这样。您能否添加包含更多详细信息的答案以便我接受?

标签: react-native rxjs rxjs6 redux-observable


【解决方案1】:

在您的 redux-observable 应用程序中,您正在使用仅支持 pipable 运算符的较新版本的 RxJS (> 6.0),而您正在尝试使用旧的“补丁”样式(还有 rxjs-compat 包用于向后兼容,但建议仅支持旧代码)。所以从 RxJS 6 开始你应该只使用pipe():

action$.pipe(
  ofType(START_COUNTDOWN),
  switchMap(() => interval(1000).pipe(
    map((time) => updateTime(time))
  )),
);

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2018-11-10
    • 2017-04-14
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多