Я изучаю реактивное программирование с использованием RxJava2, и у меня возник вопрос по поводу его использования с драйвером асинхронной базы данных, например MongoDB.
Если я использую блокирующий драйвер MongoDB для получения коллекции, подход будет такой:
public class MyDao{
...
public Document getFirstDocument(String collectionName){
MongoCollection<Document> collection = database.getCollection(collectionName);
return collection.find().first();
}
}
public class MyService {
...
public Observable<Document> getFirstOf(String collectionName){
return Observable.just(myDao.getFirstDocument(collectionName));
}
}
Вместо этого, работая с асинхронным драйвером MongoDB, мой тип возврата для операции чтения - это void (а не Document или Future) с методом обратного вызова внутри, например:
collection.find().first(
(document, throwable) -> {
myService.myCallback(document);
}
);
Итак, как я могу передать мои наблюдаемые документы в MyService?
public class MyDao{
...
public void getFirstDocument(String collectionName){
MongoCollection<Document> collection = database.getCollection(collectionName);
collection.find().first(
(document, throwable) -> {
//SOME SORT OF CALLBACK
}
);
}
}
public class MyService {
...
public Observable<Document> getFirstOf(String collectionName){
return ???????
}
}