【问题标题】:redux-observable: Returning interval from an Epicredux-observable:从 Epic 中返回间隔
【发布时间】:2017-08-02 21:11:51
【问题描述】:

我正在尝试将以下 @ngrx 效果转换为 redux-observable 史诗:

  @Effect()
  startReading$ =
    this.actions$.ofType('START_READING').switchMap(() => {
      return Observable.interval(200)
        .takeUntil(
          this.actions$.ofType('ABORT_PAGE_PROCESSING))
        .mapTo({ type: 'PROCESS_PAGE' });
    });

我的尝试是:

export const startReadingEpic = action$ =>
  action$
    .ofType('START_READING')
    .switchMap(() =>
      Observable.interval(200)
        .takeUntil(action$.ofType('ABORT_PAGE_PROCESSING'))
        .mapTo({ type: 'PROCESS_PAGE' })
    );

这似乎不起作用。返回单个 Observable.of({ type: 'PROCESS_PAGE' }) 工作正常。

我是否错过了由 @ngrx 开箱即用处理的 redux-observable 所需的任何内容?

谢谢。

【问题讨论】:

  • 代码看起来正确。究竟是什么行不通?你能记录下这些动作吗?
  • 我正在记录通过我的应用程序的所有操作。使用 Observable.interval 版本时,史诗中没有发送任何内容。它使用 Observable.of({ type: 'PROCESS_PAGE' }) 发送出去
  • 只是为了确保:控制台中是否有任何错误?你能确认所有需要的 rx 操作符都被导入了吗?
  • 同意。代码看起来不错。这只是普通的 Rx,与 redux-observable 或 ngrx 无关 :)

标签: rxjs redux-observable


【解决方案1】:

代码看起来不错。它只是普通的 Rx,与 redux-observable 或 ngrx 无关(ofType 运算符除外,但在两个库中都是相同的)

在这里,正在工作:

https://jsbin.com/nosabuy/edit?js,output

您的应用中的其他地方一定有问题。检查你的控制台是否有错误,但如果你没有看到任何错误,你可以尝试在 Chrome 中使用“Pause on Caught Exceptions”来查看是否有人在默默地吞下错误。有一个突出的 RxJS 错误,其中 Rx 本身可能会吞下错误,并且在 redux-observable 的情况下,如果您的 reducer 中有错误,它可能会影响您:https://github.com/redux-observable/redux-observable/issues/263。也就是说,我警告你不要立即假设你被这个虫子咬了。您的调试器是您在这里确认发生了什么的最好朋友。


本节只是为了绕过 stackoverflow 的验证,它不会让我在没有代码的情况下提交 jsbin 链接

// ignore this

【讨论】:

  • 我在控制台中根本没有收到任何错误,并且“在捕获异常时暂停”不会触发任何内容,因此似乎没有抛出任何错误。我已经尝试过使用计时器和延迟运算符(并导入它们),问题是一样的。唯一受支持的输出似乎是通过 Observable.of 返回单个 Observable。我实际上是在使用 React Native,难道不支持这些运算符?
  • 好吧,我想通了。我在 Android 模拟器上调试,我需要做的就是……重新启动模拟器,它工作正常。移动开发有时让我发疯。非常感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2021-10-08
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2021-01-09
  • 1970-01-01
相关资源
最近更新 更多