Rxjs OR 运算符
Rxjs OR operator
我正在尝试使用 rxjs 实现或运算符。 is Race 函数用于 OR 运算符。
代码示例:
export function saveComment(action$) {
return race(
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));
}
根据问题判断有点困难,但看起来您正试图从每个可观察值中发出值并继续接收排放,对顺序没有偏好要么发生排放?
我建议查看 merge 运算符。它的行为类似于逻辑 OR,每当一个 OR 传递给它的其他 observables 发出时发出。
Race 将仅发出 它从传递给它的 observable 接收到的第一个 发射,然后它就会完成。
如果您想继续监听发出的值而不关心顺序,请使用合并。代码看起来类似于:
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) 包含 pipeable operators,代码将如下所示:
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。
您可以在 learn-rxjs.
中找到更多关于 Rxjs Observables 和 Operators 的信息
我正在尝试使用 rxjs 实现或运算符。 is Race 函数用于 OR 运算符。 代码示例:
export function saveComment(action$) {
return race(
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));
}
根据问题判断有点困难,但看起来您正试图从每个可观察值中发出值并继续接收排放,对顺序没有偏好要么发生排放?
我建议查看 merge 运算符。它的行为类似于逻辑 OR,每当一个 OR 传递给它的其他 observables 发出时发出。
Race 将仅发出 它从传递给它的 observable 接收到的第一个 发射,然后它就会完成。
如果您想继续监听发出的值而不关心顺序,请使用合并。代码看起来类似于:
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) 包含 pipeable operators,代码将如下所示:
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。
您可以在 learn-rxjs.
中找到更多关于 Rxjs Observables 和 Operators 的信息