เมื่อไหร่ที่คุณใช้map
VS flatMap
ในRxJava ?
ตัวอย่างเช่นเราต้องการจับคู่ไฟล์ที่มี JSON เป็น Strings ที่มี 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
มัน verbose มากขึ้น แต่เราสามารถส่งต่อปัญหาลงโซ่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
(ไม่ใช่ verbosity) ฉันไม่ได้เห็นแนวปฏิบัติที่ดีที่สุดเกี่ยวกับเรื่องนี้ลอยไปมาและฉันอยากรู้ว่ามันถูกใช้ในทางปฏิบัติอย่างไร
subscriber.onError()
เป็นต้นตัวอย่างทั้งหมดที่ฉันเห็นมีข้อผิดพลาดที่ส่งไปในทางนั้น มันไม่สำคัญหรอก