Redux Rxjs或运算符

Redux Rxjs或运算符,redux,rxjs,reactive-programming,rxjs5,redux-observable,Redux,Rxjs,Reactive Programming,Rxjs5,Redux Observable,我正在尝试用rxjs实现or运算符。is Race功能用于OR运算符。 代码exmaple: 导出函数saveComment(action$){ 复赛( 类型(COMMENT.SAVE)的操作$, 类型的操作$(COMMENT.DELETE) ) .map((操作)=>action.payload) .flatMap((数据)=>commentService.saveComment(data.leadId,data.comment)) .map((resp)=>SaveCommentSucce

我正在尝试用rxjs实现or运算符。is Race功能用于OR运算符。 代码exmaple:

导出函数saveComment(action$){
复赛(
类型(COMMENT.SAVE)的操作$,
类型的操作$(COMMENT.DELETE)
)
.map((操作)=>action.payload)
.flatMap((数据)=>commentService.saveComment(data.leadId,data.comment))
.map((resp)=>SaveCommentSucceed(resp.leadId,resp.comments))
.do((res)=>newcomments().injectComments(res.payload.leadId,res.payload.Comments));

}
根据这个问题有点难以判断,但看起来您正试图从每个可见光发射值,并继续接收发射,而不选择发射发生的顺序

我建议看看接线员。它的行为类似于逻辑OR,只要传递给它的一个或另一个观察物发出,它就会发出

将仅发射它从通过的观测值接收到的第一次发射,然后它将完成

如果要继续侦听发出的值,而不关心顺序,请使用“合并”。代码看起来与此类似:

export function saveComment(action$) {
    return Observable
        .merge(
            action$.ofType(COMMENT.SAVE),
            action$.ofType(COMMENT.DELETE)
        )
        .map((action) => action.payload)
        .flatMap((data) => commentService.saveComment(data.leadId, data.comment))
        .map((resp) => SaveCommentSucceed(resp.leadId, resp.comments))
        .do((res) => new Comments().injectComments(res.payload.leadId, res.payload.comments));
}
如果您使用的Rxjs(>=5.5)版本包含以下内容,则代码如下所示:

export function saveComment(action$) {
    return merge(
            action$.ofType(COMMENT.SAVE),
            action$.ofType(COMMENT.DELETE)
        )
        .pipe(
            map((action) => action.payload),
            flatMap((data) => commentService.saveComment(data.leadId, data.comment)),
            map((resp) => SaveCommentSucceed(resp.leadId, resp.comments)),
            tap((res) => new Comments().injectComments(res.payload.leadId, res.payload.comments))
        );
}
如果您想在一个可观察到的发射后停止收听,请继续使用race

您可以了解更多关于Rxjs可观测对象和运算符的信息