我对函数式编程和反应式RxJava相当新。我想从数据库中获取设备的id和名称并将其存储在Map中,我是以RxJava样式进行的。我正在调用一个不需要返回任何内容的函数
fetch
那么函数看起来像;
.doOnNext(t -> updateAssetNameMap())
成功连接到DB并且查询也正确完成。
我可以通过 private void updateDeviceNameMap() {
LOGGER.debug("Reading device name and id from database");
Observable<SQLConnection> jdbcConnection = createJdbcConnection();
Scheduler defaultScheduler = RxHelper.scheduler(vertx);
Observable<JsonArray> res = jdbcConnection //need to return JsonArray
.flatMap(connection -> just(connection)
.flatMap(j -> runQuery(connection, "SELECT name,id FROM device")
.observeOn(defaultScheduler)
.doOnNext(m -> LOGGER.info("size: " + m.size()))
.flatMap(job -> { LOGGER.info(">>" + job.getJsonArray(0));
//or if I can extract JsonArray items here,
//I can update my Map here too.
return just(job.getJsonArray(0));
}
)
.doOnError(e -> { LOGGER.error("failed to connect to db", e);
connection.close(); })
.doOnCompleted(connection::close)
.onErrorReturn(e -> null));
//System.out.println("" + res.map(d -> LOGGER.info(d.toString())));
//get the JsonArray and update the deviceNameMap
将任何对象转换为Observable,但不能反过来。需要在Observable.from(ObjectName)
之后进行适当的映射,但我不知道如何。运行Verticle后,我甚至看不到从行.flatMap(job -> just(job.getJsonArray(0))
记录的任何内容。
我错过了什么吗?
答案 0 :(得分:0)
您必须订阅Observable<JsonArray>
否则不会发生任何事情。