我认为大多数反应式实现都可以类似地完成此操作,因此在此不指定任何特定的库和语言。
对流产生反应性副作用的正确方法是什么(不确定此处使用的正确术语是什么)?
因此,可以说我们有Player
个流。我们希望将其转换为仅id
个流。但是除此之外,我们还要根据ID进行其他一些反应式处理。
这是一种不那么优雅的方式,但是实现这一目标的惯用方式是什么:
Observable<Player> playerStream = getPlayerStream();
return playerStream
.map(p -> p.id)
.flatmap(id -> {
Observable<Result> weDontCare = process(id);
// Now the hacky part
return weDontCare.map(__ -> id);
})
可以吗?似乎不太优雅。
答案 0 :(得分:0)
我不了解RxJava,但是您也可以获取项目反应器标签,根据您希望副作用如何影响流,有两种方法可以对反应器进行此操作。如果您想等待副作用发生,以便可以处理错误等(我的首选方式),请使用delayUntil:
return getPlayerStream()
.map(p -> p.id)
.delayUntil(id -> process(id));
如果您希望ID无需等待就直接通过,而是执行即弃型样式的副作用,则可以使用doOnNext:
return getPlayerStream()
.map(p -> p.id)
.doOnNext(id -> process(id).subscribe());
答案 1 :(得分:-1)
Observable<Player> playerStream = getPlayerStream();
return playerStream
.map(p -> p.id)
.doOnEach(id -> { //side effect with id
Observable<Result> weDontCare = process(id);
weDontCare.map(__ -> id);
})