什么时候在RxJava中使用map
vs ?flatMap
举例来说,假设我们要将包含JSON的文件映射到包含JSON的字符串中,
使用map
,我们必须以Exception
某种方式处理。但是如何?
Observable.from(jsonFile).map(new Func1<File, String>() {
@Override public String call(File file) {
try {
return new Gson().toJson(new FileReader(file), Object.class);
} catch (FileNotFoundException e) {
// So Exception. What to do ?
}
return null; // Not good :(
}
});
使用flatMap
,它更加冗长,但是Observables
如果我们选择其他地方甚至重试,我们可以将问题转发到链的下方并处理错误。
Observable.from(jsonFile).flatMap(new Func1<File, Observable<String>>() {
@Override public Observable<String> call(final File file) {
return Observable.create(new Observable.OnSubscribe<String>() {
@Override public void call(Subscriber<? super String> subscriber) {
try {
String json = new Gson().toJson(new FileReader(file), Object.class);
subscriber.onNext(json);
subscriber.onCompleted();
} catch (FileNotFoundException e) {
subscriber.onError(e);
}
}
});
}
});
我喜欢的简单性map
,但是喜欢的错误处理flatmap
(不是冗长)。我还没有看到关于此的最佳实践,我很好奇在实践中如何使用它。
subscriber.onError()
等。我所看到的所有示例都以这种方式路由了错误。没关系吗?