javascript - 如何取消订阅 redux observable 中的内部 observable?

标签 javascript rxjs rxjs6 redux-observable unsubscribe

在下面的史诗中,我正在监听一个 action$ 流,然后也监听一个 auth 流 authState(app.auth())

export const fetchAuthStatus = action$ =>
      action$.pipe(
        ofType(AUTH_STATUS_CHECKED),
        switchMap(() => authState(app.auth())),
        switchMap(user =>
          user
            ? of({ type: 'SIGNED_IN', payload: user })
            : signIn(googleAuthProvider)
        ),
        catchError(error => console.log('problems signing in'))
      );

它按预期工作,唯一的问题是,如果我通过注销来更改身份验证状态,那么史诗会触发 signIn() 方法,因为 user 不再可用。

登录后如何停止监听 authState(app.auth())。史诗中的取消订阅逻辑在哪里?

最佳答案

只要您的应用正在运行,Epic 就应该保持活力。

您没有完成它们,而是将它们静音

要将流静音,有很多可能性。例如,windowToggle运算符将允许您通过其他流(例如其他事件流)静音您的可观察值。

例如您可以在 SIGN_IN - SIGN_OUT 序列之间将史诗静音。并在 SIGN_OUT - SIGN_IN 期间取消静音。

这是一篇关于 different pausing strategies with rxjs 的文章.

希望这有帮助

关于javascript - 如何取消订阅 redux observable 中的内部 observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55433371/

相关文章:

rxjs - 我们应该为每个 Action 类型创建一个 Epic 吗?在 redux-observable 中

Angular/RxJS 6 - 如何对 next() 触发的指令抛出异常进行单元测试

angular6 - Angular v6、rxjs v6 错误 TS2339 : Property 'pipe' does not exist on type 'OperatorFunction

javascript - jQuery 可排序溢出 : hidden; between two lists

rxjs - 异步等效于 RxJS 中的 tap()?

javascript - 如何测试一个字符串是否是有效的UTF16字符串?

rxjs6 - rxJS 中的last 和publishLast 运算符有什么区别?

reactjs - 如何获得史诗中的先前状态

javascript - 在javascript中从 Controller MVC获取json

javascript - Node.js 外部函数调用