【发布时间】:2019-04-20 22:09:39
【问题描述】:
有没有办法在不阻塞事件循环的情况下等待未来完成?
查询 Mongo 的用例示例:
Future<Result> dbFut = Future.future();
mongo.findOne("myusers", myQuery, new JsonObject(), res -> {
if(res.succeeded()) {
...
dbFut.complete(res.result());
}
else {
...
dbFut.fail(res.cause());
}
}
});
// Here I need the result of the DB query
if(dbFut.succeeded()) {
doSomethingWith(dbFut.result());
}
else {
error();
}
我知道doSomethingWith(dbFut.result()); 可以移动到处理程序,但如果它很长,代码将变得不可读(回调地狱?)这是正确的解决方案吗?这是没有额外库的万能解决方案吗?
我知道 rxJava 简化了代码,但我不知道,学习 Vert.x 和 rxJava 实在是太多了。
我也想试试vertx-sync。我将依赖项放在pom.xml;一切都下载好了,但是当我启动我的应用程序时,出现以下错误
maurice@mickey> java \
-javaagent:~/.m2/repository/co/paralleluniverse/quasar-core/0.7.5/quasar-core-0.7.5-jdk8.jar \
-jar target/app-dev-0.1-fat.jar \
-conf conf/config.json
Error opening zip file or JAR manifest missing : ~/.m2/repository/co/paralleluniverse/quasar-core/0.7.5/quasar-core-0.7.5-jdk8.jar
Error occurred during initialization of VM
agent library failed to init: instrument
我知道该错误的一般含义,但我不知道在那种情况下...我试图用谷歌搜索它,但没有找到任何关于将哪个清单放在哪里的明确解释。和以前一样,除非是强制性的,否则我更喜欢一次学习一件事。
那么,回到问题:“基本”Vert.x 有没有一种方法可以等待未来而不会干扰事件循环?
【问题讨论】:
标签: vert.x