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()
etcを呼び出しません。私が見たすべての例は、エラーをそのようにルーティングしました。それは問題ではありませんか?