javascript - 重置 RxJS concatMap 而不完成外部 Subject
问题描述
我正在使用 aconcatMap
来处理对 API 的多个请求,我希望在处理下一个批次之前完成每个请求批次。触发流程时concatMap
按预期工作callSubject.next(requestData)
问题:对于某些类型,requestData
我想取消任何飞行中的 http 调用,并重置concatMap
. 取消函数httpClient
内发生的调用getAll
非常方便(我有一个takeUntil
这样做的 - 未显示),但concatMap
可能仍有许多排队的请求将被处理。
有没有办法在concatMap
不完成callSubject
主题的情况下重置?
注意:如果我触发unsubscribeCallSubject$.next()
这会清除 concatmap,但也会完成 callSubject,这意味着它不能再与callSubject.next(reqData)
// callSubject is a Subject which can be triggered multiple times
callSubject
.pipe(
concatMap((req) => {
// getAll makes multiple httpClient calls in sequence
return getAll(req).pipe(
catchError((err) => {
// prevent callSubject completing on http error
return of(err);
})
);
}),
takeUntil(unsubscribeCallSubject$)
)
.subscribe(
(v) => log("callSubject: next handler", v),
(e) => log("callSubject: error", e),
() => log("callSubject: complete")
);
解决方案
如果我理解正确的问题,您可以尝试使用switchMap
任何时间unsubscribeCallSubject$
发出的方法。
代码看起来像这样
unsubscribeCallSubject$.pipe(
// use startWith to start the stream with something
startWith('anything'),
// switchMap any time unsubscribeCallSubject$ emits, which will unsubscribe
// any Observable within the following concatMap
switchMap(() => callSubject$),
// concatMap as in your example
concatMap((req) => {
// getAll makes multiple httpClient calls in sequence
return getAll(req).pipe(
catchError((err) => {
// prevent callSubject completing on http error
return of(err);
})
);
}),
)
.subscribe(
(v) => log("callSubject: next handler", v),
(e) => log("callSubject: error", e),
() => log("callSubject: complete")
);
老实说,我没有测试过这种方法,所以我不确定它是否能解决你的问题,但如果我正确理解了你的问题,这可能会奏效。
推荐阅读
- php - 无法确定在 mailjet API 调用中将模板 ID 放在何处
- axapta - 修改方法
- r - 我写了一个函数来删除替换 % 登录 r 代码
- python-3.x - jinja2.exceptions.TemplateNotFound:模板/entry.html
- sql - 图表类中的 SQL 数据库架构
- javascript - 重试时客户端连接未正确关闭
- javascript - Chart,js Pie Chart 可以调整饼图和图例的差距吗
- swift - Swift 计时器没有在精确的时间执行
- node.js - IISNode WebSocket 从远程浏览器抛出错误“到 'ws://somewebsite.com/sampleServer' 的 WebSocket 连接失败:帧头无效”
- reactjs - React 类组件的问题与使用 onScroll Init 的 React Hook 的行为不同