【发布时间】:2017-06-12 09:19:12
【问题描述】:
我有两个操作 step_1() 和 step_2(),想在 step_1() 之后执行 step_2()。
对于普通的 java,这将是:
step_1();
step_2();
对于 vertx,我必须使用 vertx-compose()。我说的对吗?
根据https://groups.google.com/forum/#!topic/vertx/FuvlPLpoGOA,我不需要Futures 用于顺序代码。
“如果您想按顺序执行每个请求,则不需要期货。”
那么我怎么能不使用期货呢?
我不知道这是否重要:执行此代码的我的 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(){
..
}
这是正确且最短的 (!) 方式吗?
【问题讨论】:
-
澄清问题在这里会非常有帮助,因为您如何将
step_1()定义为返回void,但您显示的好像是从中获得Future,您的意图是清楚你想要step1执行然后执行step2,它们本质上是blocking,这就是你想要workerverticle的原因。请澄清,以便我们可以更好地为您服务。 -
我得到了一个未来
。但是,我唯一需要的是制作“step1”然后制作“step2”。我猜,“worker verticle”不会使整个代码在 start-method 中阻塞,或者?如果是这样,那么我不需要 Future . -
谢谢,确实你是对的
Workerverticle 没有那种魔法
标签: vert.x