当前位置: 首页 > 面试题库 >

Java8 CompletableFuture recoveryWith等效吗?例如异常但返回CompletableFuture __

漆雕彬彬
2023-03-14
问题内容

__

我没有看到一种处理异步结果异常的明显方法。例如,如果我想重试异步操作。我会期望像这样的事情,但是handleAsync并没有按照您认为的那样做-
异步地在另一个线程上运行回调。在这里返回CompletionStage是不正确的。当天的危害问题:thenApply就是thenCompose因为exceptionally是为了什么?

CompletionStage<String> cf = askPong("cause error").handleAsync((x, t) -> {
    if (t != null) {
        return askPong("Ping");
    } else {
        return x;
    }
});

AskPong在哪里问演员:

public CompletionStage<String> askPong(String message){
    Future sFuture = ask(actorRef, message, 1000);
    final CompletionStage<String> cs = toJava(sFuture);
    return cs;
}

问题答案:

__

在试图找出用Java
8完成Scala的restoreWith的正确方法后,我大失所望,最后我还是自己写了。我仍然不知道这是否是最好的方法,但是我创建了以下内容:

public RecoveryChainAsync<T> recoverWith(Function<Throwable,
                                         CompletableFuture<T>> fn);

通过重复调用recoverWith,我将恢复链中的功能排入队列,并使用“
handle”自己实现恢复流程。然后,RecoveryChainAsync.getCompletableFuture()返回整个链的代表性CompletableFuture。希望这可以帮助。



 类似资料:
  • 问题内容: 我发现以下行为至少 很奇怪 : 在子句中使用时,该异常消失。那是个错误吗?那在任何地方都有记录吗? 但是真正的问题(我将标记为正确的答案)是: python开发人员允许这种奇怪行为的原因是什么? 问题答案: 您询问了有关Python开发人员的推理。我不能为他们说话,但是没有其他行为可以理解。函数可以返回值,也可以引发异常。它不能同时做到。“最终”子句的目的是提供“保证”运行的清除代码,

  • 问题内容: 我是MySql的新手,所以请保持谦虚。 Oracle 中的子句或MySQL中的SQL Server中的表是否等效?我想做的是以下几点: 从表A删除一组行 将已删除的行集插入表B。 请帮忙! 谢谢 问题答案: 不幸的是,您不能在 一个查询中 同时进行插入和删除 操作 ,但是如果您使用的是事务存储引擎(例如InnoDB),则可以在一个 事务中 完成所有操作。此外,它受Oracle和Post

  • 我用webpack建立了一个浏览器umd库。 我正在侦听输入文件的onchange事件。当有人提交图像/文件时,它会将其转换为base64。我试图让它尽可能看起来不那么明显,所以我使用了promises和wait/asynchttps://blog.shovonhasan.com/using-promises-with-filereader/. 但是,有一个问题-当我调用convertToBase

  • 我有一个windows服务,我从另一个开发人员继承,它运行非常慢,并有许多对eBay API的缓慢调用。我希望在没有太多重构的情况下加快它。 我刚刚开始研究使用C#Async/Await来尝试让这些缓慢的调用运行异步。以下是我试图实现的目标: 如何获取返回的类型以便使用它们?我尝试使用,但它只有属性可用。

  • 问题内容: 当使用简单的回调(例如下面的示例)时: 如何更改功能以使用异步/等待?具体来说,假设“ someEvent”被保证只能被调用一次,那么我希望函数测试是一个异步函数,该异步函数在执行回调之前不会返回,例如: 问题答案: 不是魔术。异步函数是可以为您解开Promises的函数,因此您需要返回一个Promise才能起作用。像这样: 然后 但这也是一个谎言,因为异步函数也返回Promises本

  • 使用以下示例中的简单回调时: 如何将函数更改为使用异步/等待?具体地说,假设某个事件保证被调用一次并且只有一次,我希望函数测试是一个异步函数,直到执行回调才返回,例如: