我正在做一个API调用来获取节目播客的描述,并且基于播客的类型,我可能也可能不必执行另一个API调用来获取更多信息。我是RxJava的新手,我不确定进行此类调用的最佳方法。这是我到目前为止的内容:
public void fetchFeaturedItems() {
Timber.i("Fetching Featured...");
disposables.add(episodeService.getFeatured()
.subscribeOn(Schedulers.io())
.doOnNext(featured -> { //make second call
final Episode episode = featured.getEpisode();
Observable<Timing> timingObservable = episodeService.getTimingForEpisodeActs(episode);
if (timingObservable != null) {
timingObservable
.subscribeOn(Schedulers.io())
.doOnError(Timber::e)
.subscribe(timing -> {episodeManager.saveTiming(timing);}); //save to database
}
})
.observeOn(Schedulers.io())
.subscribe(featured -> {
saveFeatured(featured);
final Episode episode = featured.getEpisode();
notificationManager.handleNewEpisodeNotification(episode);
}, Timber::e));
}
这一切正常,但是我在第二个订阅上收到“未使用订阅结果”的棉绒警告。我没有合并两个电话的结果。我真的可以使用一些指导。
答案 0 :(得分:0)
使用flatMap()代替onNext()。您会收到有关第二次订阅的“未使用订阅结果”的警告。 flatMap()应该有所帮助。
read this首先和其他RxJava文档
答案 1 :(得分:0)
print (df.set_index('id')
.fillna('s,g,r')
.stack()
.str.split(',|;', expand=True)
.stack()
.str.split(':', expand=True)
.reset_index(level=2, drop=True)
.set_index(0, append=True)[1]
.unstack())
0 g r s
id
0 c1 B 2 1
c2 A 3 2
c3 C 4 1
c4 D 2 3
1 c1 None None None
c2 E 4 2
c3 C 3 3
c4 F 3 3
是一个副作用运算符。您正在做什么:
<Route
path='/dashboard'
render={(props) => <Dashboard {...props} isAuthed={true} />}
/>
只会创建一个一次性的。这种一次性物品不会成为潮流的一部分。还要注意,.doOnNext
流现在将完全独立运行,因为正如我刚才所说, timingObservable
.subscribeOn(Schedulers.io())
.doOnError(Timber::e)
.subscribe(timing -> {episodeManager.saveTiming(timing);});
是一个副作用运算符。您正在做的是一劳永逸的电话。要将响应作为流的一部分,请使用。timingObservable
代替。doOnNext
。它将合并您的响应,并将其推送给下游操作员。
理想情况下,反应流只应订阅一次-您要进行两次。这是立即的代码气味。