簡體   English   中英

RxJava從Observable返回JsonArray <JsonArray>

[英]RxJava return JsonArray from Observable<JsonArray>

我對函數式編程和反應性RxJava相當陌生。 我想從數據庫中獲取設備的ID和名稱,並將其存儲在Map中,我正在以RxJava樣式進行操作。 我正在調用不需要返回任何東西的函數

.doOnNext(t -> updateAssetNameMap())

然后函數看起來像;

    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.from(ObjectName)將任何Object轉換為Observable,但是不能相反。 .flatMap(job -> just(job.getJsonArray(0))之后需要進行適當的映射,但是我不知道如何運行。運行Verticle之后,我什至看不到從.flatMap(job -> { LOGGER.info(">>" + job.getJsonArray(0));我缺少什么嗎?

您必須訂閱您的Observable<JsonArray>否則什么也不會發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM