---abcde-----f-------gh-----i----> //Events
我有一个"工作队列"我想观察/订阅。这是要处理的命令对象数组。新的工作项目通常以突发形式到达,并且需要连续处理(按接收顺序,一次一个,直到完全处理)。
我正在使用RxJS 5.0.0-beta.6。 (其他图书馆强加的版本)
这是一个工作示例,说明了我想要的行为,但使用的是RxJS v4。
有问题的主要代码是......
var events$ = Rx.Observable.fromEvent(produceEvent, 'click')
.timestamp()
.tap(({timestamp}) => updatePanelAppend(pending, timestamp));
var inProgress$ = events$;
var done$ = inProgress$
.flatMapWithMaxConcurrent(1, ({timestamp}) =>
Rx.Observable.fromPromise(() => {
updatePanelAppend(inProgress, timestamp);
removeFromPanel(pending, timestamp);
return expensiveComputation(getRandomInt(1, 5) * 1000, timestamp)
}));
done$.subscribeOnNext((timestamp) => {
updatePanelAppend(done, timestamp);
removeFromPanel(inProgress, timestamp);
});
http://jsbin.com/meyife/edit?js,output
考虑到API的当前beta状态和不完整/更改的文档,我无法弄清楚如何在RxJS 5中执行此操作。
更新:此migration guide用于从v4移至v5,显示已移除的许多功能,但未指示如何以新方式执行操作。已删除操作的示例:.tap,.controlled,.flatMapWithMaxConcurrent(已重命名)。
答案 0 :(得分:2)
flatMap
/mergeMap
- 现在采用并发参数
tap
- > do
subscribeOnNext
已不复存在,因此只需将subscribe
与一个参数一起使用。
fromPromise
重载,因此请改用defer
。
请参阅更新的jsbin here