在下面的史诗中,我正在听一个动作$ stream,然后还听一个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'))
);
它按预期工作,唯一的问题是,如果我通过注销更改auth状态,那么epic将触发signIn()
方法,因为user
is不再可用。
一旦我登录,我如何停止听authState(app.auth())
。取消订阅逻辑在哪里进入史诗?
只要您的应用程序正在运行,Epics就会保持活力。
你没有完成它们,你将它们静音。
要使流静音,有很多可能性。例如,windowToggle
运算符将允许您通过其他流(例如,其他事件流)使您的observable静音。
例如。你在SIGN_IN
- SIGN_OUT
序列之间静音史诗。并且在SIGN_OUT
- SIGN_IN
时期取消静音。
下面是一篇关于different pausing strategies with rxjs的文章。
希望这可以帮助