【发布时间】:2022-01-11 11:51:22
【问题描述】:
我有一个像这样返回 Future 的方法,
private Future<Void> generateChildSerial(RoutingContext context, Long createJobID)
在我将数据插入数据库后,我会像这样返回未来,
db
.preparedQuery(sql)
.executeBatch(batch, res -> {
if (res.succeeded()) {
// Process rows
RowSet<Row> rows = res.result();
LOG.info("rows.rowCount():"+ rows.rowCount());
} else {
System.out.println("Batch failed " + res.cause());
}
promise.complete();
});
return promise.future();
然后在我链接它的 compose 方法中,我试图像这样检查未来的状态,
createJob(context)
.compose(jobID ->
{
LOG.debug("jobID "+jobID);
Future<Void> generateChildSerial = generateChildSerial(context, jobID);
LOG.debug("generateChildSerial.succeeded() "+generateChildSerial.succeeded()+" "+generateChildSerial.result());
LOG.debug("generateChildSerial.isComplete() "+generateChildSerial.isComplete());
return generateChildSerial;
});
数据库操作成功,但由于某种原因,这两种方法都为假,控制台显示如下,
[vert.x-eventloop-thread-1] DEBUG com.job.CreateJobHandler - generateChildSerial.succeeded() false null
2021-12-06 11:42:41.709+0330 [vert.x-eventloop-thread-1] DEBUG com.job.CreateJobHandler - generateChildSerial.isComplete() false
2021-12-06 11:42:41.914+0330 [vert.x-eventloop-thread-1] INFO com.job.CreateJobHandler - rows.rowCount():1
任何帮助将不胜感激! 干杯
【问题讨论】: