Javascript 在redux observable中使用rxjs示例来侦听其他操作
我使用redux observable作为调度操作和存储之间的中间件。我试图使用rxjsJavascript 在redux observable中使用rxjs示例来侦听其他操作,javascript,rxjs,redux-observable,Javascript,Rxjs,Redux Observable,我使用redux observable作为调度操作和存储之间的中间件。我试图使用rxjssample函数来实现这一点,但不幸的是,它对我不起作用。这是我的史诗: export const inviteUserEpic = (action$) => { return action$.ofType(a.INVITE_USER) .flatMap(({ body }) => { return Observable.concat( Ob
sample
函数来实现这一点,但不幸的是,它对我不起作用。这是我的史诗:
export const inviteUserEpic = (action$) => {
return action$.ofType(a.INVITE_USER)
.flatMap(({ body }) => {
return Observable.concat(
Observable.of({ type: authActions.REGISTER_REQ, body }),
Observable.of(push(`/team/${body.teamId}`))
.sample(action$.ofType(authActions.REGISTER_SUCCESS))
);
});
};
基本上,这个想法是有多个地方可以注册一个新用户,在这种情况下,我希望在成功注册用户后重定向到团队页面。我看到REGISTER_REQ发出,它随后将发出REGISTER_SUCCESS。但从未对重定向可观察对象进行采样。这是因为
sample
操作符仅处于活动状态,并且在源本身仍处于活动状态时订阅通知程序。在这种情况下,源是一个可观察的.of()
,它将发出提供的操作,然后立即执行complete()
,这意味着您将不再对任何内容进行采样—在调度注册成功之前,它已经是complete()
。i、 e..sample()
不会阻止可观察链的完成
相反,您需要先匹配预期的操作,然后在匹配时将其映射到您的push()
。您可能还希望只侦听一次请求成功
,而不是无限期,因此您需要添加一个。取(1)
action$类型(authoctions.REGISTER\u SUCCESS)
.采取(1)
.map(()=>push(`/team/${body.teamId}`)
把它和你现有的史诗结合起来
export const inviteUserEpic=(action$)=>{
返回类型为的操作$(a.INVITE\u用户)
.flatMap(({body})=>{
返回可观察的.concat(
可观察的({type:authActions.REGISTER_REQ,body})的,
类型的action$(authActions.REGISTER\u成功)
.采取(1)
.map(()=>push(`/team/${body.teamId}`)
);
});
};
你可以在这里看到一个有效的例子:@Jake Dluhy我忘了提到你可能不想永远听注册成功
,在这种情况下,你应该添加一个。取(1)
,这样它在第一场比赛后就完成了。我已经相应地编辑了我的答案。谢谢!我想到的另一件事是,如果请求失败,我想取消重定向。我添加了.takeUntil(action$.ofType(authActions.REGISTER\u FAILURE))
,这似乎很有效。是的,这太完美了。