gpt4 book ai didi

vert.x - 与 vertx 组合以获取顺序代码

转载 作者:行者123 更新时间:2023-12-03 23:37:57 25 4
gpt4 key购买 nike

我有两个操作 step_1() 和 step_2() 并且想在 step_1() 之后执行 step_2()。

使用普通的java,这将是:

step_1();
step_2();

对于 vertx,我必须使用 vertx-compose()。我对吗?

根据 https://groups.google.com/forum/#!topic/vertx/FuvlPLpoGOA ,我不需要序列代码的 future 。

"If you want to do each request sequencially you dont need futures."



那么我怎么能在不使用 future 的情况下做到这一点呢?

我不知道,这是否重要:执行此代码的我的 Vertx 是“Worker”-Verticle。
@Override
public void start(Future<Void> fut) throws IOException {

Future<Void> step_1 = Future.future();
step_1.compose(res -> {
// If the future succeeded
Future<Void> step_2 = step_1();

step_2.compose(res2 -> {
step_2();

}, Future.future().setHandler(handler -> {
// If the future failed
}));

//I dont need that
}, Future.future().setHandler(handler -> {
// If the future failed
}));

}

public void step_1(){
..
}

public void step_2(){
..
}

这是正确和最短(!)的方式吗?

最佳答案

以下是 Future 的链接示例,我已经让这个例子变得非常简单,但它展示了这个概念。

@RunWith(VertxUnitRunner.class)
public class Chaining {
private Vertx vertx = Vertx.vertx();

@Test
public void futures_chaining(TestContext context) throws Exception {
Async async = context.async();

firstOperation()
.compose((outcome) -> {
System.out.println(outcome);

return secondOperation();
})
.compose(outcome -> {
System.out.println(outcome);

/*
For stopping unit test we are returning this future
for production use-case this would be Future.succeededFuture
or Future.failedFuture depending on your method outcomes
*/
return Future.future(handle -> async.complete());
});
}

private Future<String> firstOperation() {
Future<String> future = Future.future();

vertx.setTimer(1000, delay -> future.complete("First Operation Complete"));

return future;
}

private Future<String> secondOperation() {
Future<String> future = Future.future();

vertx.setTimer(1000, delay -> future.complete("Second Operation Complete"));

return future;
}
}

关于vert.x - 与 vertx 组合以获取顺序代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44495763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com