如何在Redux可观察项中取消订阅内部可观察项?

时间:2019-03-30 16:15:14

标签: 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())。取消订阅逻辑在史诗中会放在哪里?

1 个答案:

答案 0 :(得分:0)

只要您的应用处于运行状态,史诗就应该一直存在。

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

要静音流,有很多可能性。例如,windowToggle运算符可以让您忽略其他流(例如其他事件流)的可观察性。

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

different pausing strategies with rxjs上有一篇文章。

希望这会有所帮助