由于我在堆栈中使用Vertx3.1,我想使用这些工具带来的未来特性,但在阅读后,API似乎对我来说相当有限。我甚至找不到方法让未来等待一个可观察的。这里是我的代码
public Observable<CommitToOrderCommand> validateProductRestrictions(CommitToOrderCommand cmd) {
Future<Observable<CommitToOrderCommand>> future = Future.future();
orderRepository.getOrder(cmd, cmd.orderId)
.flatMap(order -> validateOrderProducts(cmd, order))
.subscribe(map -> checkMapValues(map, future, cmd));
Observable<CommitToOrderCommand> result = future.result();
if(errorFound){
throw MAX_QUANTITY_PRODUCT_EXCEED.create("Fail"/*restrictions.getBulkBuyLimit().getDescription())*/);
}
return result;
}
private void checkMapValues(Multimap<String, BigDecimal> totalUnitByRestrictions, Future<Observable<CommitToOrderCommand>> future,
CommitToOrderCommand cmd) {
for (String restrictionName : totalUnitByRestrictions.keySet()) {
Restrictions restrictions = Restrictions.valueOf(restrictionName);
if (totalUnitByRestrictions.get(restrictionName)
.stream()
.reduce(BigDecimal.ZERO, BigDecimal::add)
.compareTo(restrictions.getBulkBuyLimit()
.getMaxQuantity()) == 1) {
errorFound = true;
}
}
future.complete(Observable.just(cmd));
}
在我第一次观察到的onComplete中,我正在检查结果,在finish之后是当我完成以后解除阻塞的操作。但是我正在寻找未来。结果不会被阻止,直到未来。完成像我期望的那样被调用。而是返回null。
问候。
vertx future不会阻塞,而是使用在注入结果时调用的处理程序(请参见sethandler
和iscomplete
)。
如果代码的外层需要一个可观察的,您不需要在将来包装它,只需返回Observable
。未来
没有太大意义,您混合了两种处理异步结果的方法。
请注意,有一些方法可以将一个可观察到的东西折叠成一个未来,但困难在于,一个可观察到的东西可能会发出几个项目,而一个未来只能容纳一个项目。您已经通过将结果收集到单个map发射中来处理这一点。
由于这个可观察的
只发出一个项,如果您想要一个future
,您应该subscribue
,并在onnext
方法中调用future.complete(yourMap)
。还要定义一个onerror
处理程序,它将调用future.fail
。
问题内容: 我有这个代码: 发生的是该文件在实际执行之前已删除。 这是因为文件仅包含本机系统调用吗?执行文件 后 如何删除?(我不知道文件的输出是什么,因为它是动态变化的)。 问题答案: 通过使用,您要求在后台启动批处理文件: 因此,您从Java()启动的进程将在后台进程完成之前返回。 删除命令以在前台运行批处理文件-然后,将等待批处理文件完成: 根据OP,重要的是要有可用的控制台窗口-这可以通过
会员等级 点击会员等级进入会员等级界面,可以看到添加会员等级栏、升级规则以及等级信息栏。 升级规则:包括升级标准和说明。 升级标准:指可根据累计积分、累计消费、购买次数这些条件来规定会员的升级。 (注:会员等级按照升级规则的标准进行升级,请慎重选择升级规则。) 点击添加会员等级。进入添加会员等级页面可以看到有基础设置、等级礼包、等级权益。其次再添加各项的信息。 一、基础设置: 1、添加等级名称:设
问题内容: 我有一个代码,其中4个线程同时运行。我想等到所有这4个线程都结束。并且只有在那之后才能继续应用程序流程。 我尝试了两种方法: ,这种方法可以正常工作。之后的代码仅在所有线程完成后才执行。 ,此技术允许执行代码,即使并非所有线程都已完成,也可以执行代码。 代码示例: 我的问题: 为什么并且不要等到所有线程都完成并打印出来 _«我们完成了! 所有线程都完成了!» _刚打完电话? 问题答案:
这个问题与下面的问题类似: 即如何等待进度条消失。 如何在Selenium WebDriver中动态等待进度条完全加载? 我的情况有点不同。在我的场景中,当进度条出现时,所有元素都被禁用。我正在使用显式等待,但仍然得到异常。 方案:在“注册”页中提供所有详细信息后,脚本单击“创建帐户”按钮。此时将出现一个圆形进度条,并持续1或2秒。如果输入的密码无效,则错误消息将显示在注册页面的顶部。我现在需要点
会员等级功能 使用场景 会员等级功能可以实现你的不同会员兑换不同的兑换项,支持对不同等级(或者身份)用户在登录积分商城时的权限控制(目前仅限商品可见性控制或者兑换限制)。 后台配置方法 1.开启会员等级功能 2.设置商品的兑换等级 使用方法 如果需要使用会员等级功能,需要在自动登录url中加入相应额外的参数。 参数 是否必须 参数类型 限制长度 参数说明 uid yes string 255 用户
我正在尝试将数据库调用移出控制器,以清理并使其可测试。当它们在控制器中时,一切都会顺利进行。我将它们移出控制器,并添加了一个异步,以确保我们等待。否则,我将调用的中的函数。现在,一旦我使用async/await,控制器中的函数就会认为没有用户,因为它没有等待。 有几个关于异步等待的SO问题,但我没有找到一个解决我的问题。我确实验证了返回了我的用户,并添加了控制台日志来显示路径。 节点猫鼬异步等待似