我有一个逻辑,我需要将数据保存在两个表中(一对多)。我在我的Java中创建了两个方法,我正在尝试使用Vertx Future和compose来按顺序实现逻辑。但是我已经走了一半,不明白当第一个未来完成时如何实现compose。我的意思是第一个未来的代码运行anAsyncAction_1(料ToAdd);,记录保存在数据库中,但是现在我如何在compose中调用我的第二个方法
public Future<Void> anAsyncAction_2(final SendToCompanyFromSupplier rawmaterialToAdd, Integer id)
{
//code to get the id from the first future and save data in the table
}
下面是我的代码
public Future<Void> adddetails(final Supplier materialToAdd)
{
final Promise<Void> added = Promise.promise();
Future<Integer> fut1 = anAsyncAction_1(materialToAdd);
LOG.debug(" future.result() "+fut1.result());
fut1.compose((outcome) -> {
LOG.debug(" future.result() "+outcome);
});
CompositeFuture.all(fut1, fut2).onComplete(ar ->
{
System.out.println("BOTH OPERATION COMPLETED!! 1 " + ar.succeeded());
try
{
System.out.println("BOTH OPERATION COMPLETED!! 2 " + ar.result().list());
added.complete();
System.out.println("BOTH OPERATION COMPLETED!!");
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
});
return added.future();
}
如果您只想编写这两个未来,可以简化实现,而无需使用CompositeFuture
或Promise
。
示例代码:
java prettyprint-override">public Future<Void> adddetails(final Object materialToAdd) {
Object rawMaterialToAdd = new Object();
return anAsyncAction_1(materialToAdd).compose(i -> anAsyncAction_2(rawMaterialToAdd, i))
.onComplete(ar -> {
if (ar.succeeded()) {
System.out.println("Both operations completed");
} else {
ar.cause()
.printStackTrace();
}
});
}
private Future<Integer> anAsyncAction_1(Object materialToAdd) {
Promise<Integer> promise = Promise.promise();
Vertx.currentContext()
.runOnContext(v -> promise.complete(1)); //Async Call. Replace with async DB call 1
return promise.future();
}
public Future<Void> anAsyncAction_2(final Object rawmaterialToAdd, Integer id) {
Promise<Void> promise = Promise.promise();
Vertx.currentContext()
.runOnContext(v -> {
System.out.println("Id received:" + id);
promise.complete();
}); //Async Call. Replace it with the async DB call 2
return promise.future();
}
下面是序列
函数饲养 这就是 组合(compose,以下将称之为组合): var compose = function(f,g) { return function(x) { return f(g(x)); }; }; f 和 g 都是函数,x 是在它们之间通过“管道”传输的值。 组合看起来像是在饲养函数。你就是饲养员,选择两个有特点又遭你喜欢的函数,让它们结合,产下一个崭新的函数。组合的用
源代码排版 所有风格都又丑又难读,自己的除外。几乎人人都这样想。把“自己的除外”拿掉,他们或许是对的… ——Jerry Coffin(论缩排) 使用 UTF-8 作为源文件的编码。 每个缩排层级使用两个空格。不要使用制表符。 # 差 - 四个空格 def some_method do_something end # 好 def some_method do_something end
有没有一种方法可以排序很多列表,而不必写: 每一张单子?当你有很多列表时,这是非常乏味的
本文向大家介绍请使用javascript写出数组快速排序代码相关面试题,主要包含被问及请使用javascript写出数组快速排序代码时的应答技巧和注意事项,需要的朋友参考一下
本文向大家介绍对arraylist中元素进行排序实例代码,包括了对arraylist中元素进行排序实例代码的使用技巧和注意事项,需要的朋友参考一下 rrayList中的元素进行排序,主要考查的是对util包中的Comparator接口和Collections类的使用。 实现Comparator接口必须实现compare方法,自己可以去看API帮助文档。 创建一个Comparator实例后,用Col
我正在做算法的中期审查,我试图用Java实现所有的伪代码,以便更好地理解算法。但是在堆排序部分,我的代码有一些问题。我的输入数组是 {10,16,4,10,14,7,9,3,2,8,1} 第一个元素只是表示我想要排序的元素的数量。换句话说,需要排序的元素从索引1开始。 我的build max heap输出是:16 14 10 8 7 9 3 2 4 1 堆排序的输出是:1 3 2 4 7 8 9