我在viewmodel中有这个主题:
private PublishSubject<String> articleSubject;
public Observable<Article> newArticleSubject() {
articleSubject = PublishSubject.create();
return articleSubject.flatMap(new Func1<String, Observable<Article>>() {
@Override
public Observable<Article> call(String articleId) {
return dataModel.getArticleById(articleId).subscribeOn(Schedulers.newThread());
}
});
}
Run Code Online (Sandbox Code Playgroud)
我像这样绑定视图:
viewModel.newArticleSubject()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new ArticleSubscriber());
Run Code Online (Sandbox Code Playgroud)
这是我的订阅者:
private class ArticleSubscriber extends Subscriber<Article> {
@Override
public void onCompleted() {
Log.d("test", "This is not ever printed");
}
@Override
public void onError(Throwable e) {
//do stuff
}
@Override
public void onNext(Article article) {
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
onCompleted永远不会被调用,但onError并onNext是.为什么?在里面dataModel.getArticleById(articleId),subscriber.onCompleted();被称为.
从PublishSubject文档中可用的图像可以得出结论:
PublishSubject以及其他*Subjects将生活,直到有人为来电onError或onCompleted.事实上,他们在这件事上与其他任何事物都没有什么不同Observable.
在newArticleSubject创建新的PublishSubject和平面地图发射到不同的可观察到的每一个项目.如果getArticleById结束有错误,则flatMap结束返回的observable 也是如此.但是,当getArticleById正常发射和完成时,flatMap将继续等待新项目发出articleSubject.如果你需要明确地结束articleSubject只是打电话articleSubject.onCompleted()
| 归档时间: |
|
| 查看次数: |
4244 次 |
| 最近记录: |