我有一个可观察的序列,每次发生调用释放事件时,我都会将该事件映射到一个 http 请求,该请求返回一些调用日志,然后我对其进行过滤并需要获取计数表单。问题是,即使从 http 请求返回 json 的映射 oberbable 并且序列已完成,原始 fromEvent Observable 尚未终止,因此 count 不会发出任何内容。每次 http 请求返回时,我都需要对过滤后的数量进行计数,但不知道如何执行此操作。
var seq = Rx.Observable
.fromEvent(call realease event)
.flatMap(agentObj =>
Rx.Observable.fromPromise(callLogHelper.getUserCallLogs(agentObj.agentId))
)
.flatMap(logs => Rx.Observable.fromArray(logs))
.filter(log => log.callTime >= 210)
.count();
我尝试了一些非常有帮助的人提供的方法,包括 user3743222 ,对此我非常感激。其中包括扫描、采样、扩展以及在映射和过滤器中使用 idx 参数。我不断遇到的主要问题是这些方法返回连续的运行总数,并且由于 http 请求可能具有上次调用时的重复数据,因此每次返回 http 请求时都需要重置运行计数。
我最终只是将 flatMap 中请求的过滤值映射为简单的数组操作,然后仅返回长度。我觉得这是一个 hacky 解决方案
var seq = Rx.Observable
.fromEvent(call realease event)
.flatMap(agentObj =>
Rx.Observable.fromPromise(callLogHelper.getUserCallLogs(agentObj.agentId))
)
.flatMap((logs) => {
var filteredLogs = logs.filter(log => log.callTime >= 210);
return Rx.Observable.of(filteredLogs.length);
})
最佳答案
根据您提出的解决方案,这样做似乎更简单:
var seq = Rx.Observable
.fromEvent(call realease event)
.flatMap(
agentObj => callLogHelper.getUserCallLogs(agentObj.agentId),
(ao, logs) => logs.filter(log => log.callTime >= 210).length
);
关于javascript - 如何在 Rxjs 中对不完整序列进行 Observable 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37011477/