Vertx - 将参数从一个组合传递到另一个组合

Vertx - passing parameter from one compose to another

我需要一些帮助来将参数从一个组合传递到另一个组合。我想将第二个撰写中的 labelParemeters 传递到最后一个撰写中,如下面的代码所示。

public Future<JsonArray> startTest(int jobID, RoutingContext context) {
    LOG.info("-----INside startTest() method-----");
    return jobDao.getJob(jobID, context)
            .compose(job -> productDao.getLabelParameters(job, context))
            .compose(labelParameters -> jobDao.getJobParentChildForPrint(jobID, context, true, labelParameters))
            .compose(parentChildSerials -> {
                    LOG.debug(" Future Returned Job Parent-Child to Print: ");
                    prepareSerialForPrint(parentChildSerials, labelParameters); //Pass Here 
                    return Future.succeededFuture(parentChildSerials);
            })
        .onFailure(error -> {
                LOG.debug("startTest() Failed: ", error);
              })
        .onSuccess(server -> {
                LOG.debug("Finished startTest!!");
                LOG.debug(server.encodePrettily());
              });
}

您可以为 Futures 中传递的数据创建一个具有 setters/getter 的上下文对象。 Compose 保证连续执行您的 Futures,您可以设置结果并假设结果存在于下一个 compose 部分的上下文对象中。示例:

public Future<JsonArray> startTest(int jobID, RoutingContext context) {
    MyTestContext myTestCtx = new MyTestConext();

    return jobDao.getJob(jobID, context)
            .compose(job -> {
                myTestCtx.setjob(job);
                return productDao.getLabelParameters(job, context);
            })
            .compose(labelParameters -> {
                myTestCtx.setLabelParameters(labelparameters);
                return jobDao.getJobParentChildForPrint(jobID, context, true, labelParameters);
            })
            .compose(parentChildSerials -> {
                var labelParameters = myTestCtx.getLabelParameters();
                prepareSerialForPrint(parentChildSerials, labelParameters); //Pass Here 
                return Future.succeededFuture(parentChildSerials);
            })
        .onSuccess(server -> LOG.debug("Finished startTest!!"));

}

您也可以为此使用 java 记录。

或者,您可以按如下方式嵌套组合部分:

    public Future<JsonArray> startTest(int jobID, RoutingContext context) {
        return jobDao.getJob(jobID, context)
                .compose(job -> productDao.getLabelParameters(job, context))
                .compose(labelParameters -> {
                    return jobDao.getJobParentChildForPrint(jobID, context, true, labelParameters)
                            .compose(parentChildSerials -> {
                                LOG.debug(" Future Returned Job Parent-Child to Print: ");
                                prepareSerialForPrint(parentChildSerials, labelParameters); //Pass Here 
                                return Future.succeededFuture(parentChildSerials);
                            })
                })    
            .onFailure(error -> LOG.debug("startTest() Failed: ", error))
            .onSuccess(server -> LOG.debug(server.encodePrettily()));
    
    }