RxJava从Observable <jsonarray>返回JsonArray

时间:2018-02-01 00:48:13

标签: java rx-java observable vert.x reactivex

我对函数式编程和反应式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))记录的任何内容。 我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

您必须订阅Observable<JsonArray>否则不会发生任何事情。