【发布时间】:2021-03-12 20:21:44
【问题描述】:
我目前正在研究 RxJS 组件,该组件的作用是定期从数据库中提取一些数据,使其作为 BehaviorSubject Observable 可用并可供客户端使用。
// "Producer"
const source2 = Observable.create((observer: Observer<Map<number,any>>) => {
this.fooService.loadFoos().then((val) => {
observer.next(val)
observer.complete()
})
})
const subj = new BehaviorSubject(new Map())
interval(5000).pipe(
switchMap(() => source2),
).subscribe(subj)
// "Client"
return subj.pipe(
first(), // get only the latest data, a Map with number keys for foos
map((f: Map<number,any>) => {
if (!f.has(fooId)) {
throw new Error('foo not found')
}
return f
}),
).toPromise()
它工作得很好,除非在极少数情况下,间隔开始以及与 switchMap f/value 一起看起来像一个空白地图。这是在使用 apache 基准测试的压力测试下重现的。
为什么会这样?上面的代码有什么问题吗?是因为switchMap的取消效果吗?
这就是失败的频率:
Concurrency Level: 100
Time taken for tests: 6.620 seconds
Complete requests: 5000
Failed requests: 1230
【问题讨论】:
标签: rxjs