当前位置: 首页 > 知识库问答 >
问题:

玩Java阿卡-一个wait.result期待等待的对象,而不接受未来

姚钊
2023-03-14

我是新来玩框架和AKKA,我是Java开发者。我使用Play 2.3.7和IntelliJ 14。我调用了Pattern.ask,它返回一个Future对象,该对象具有来自Web服务调用的String。通过控制台,我可以发现我的演员能够接收请求并执行操作。我不知道如何解析它回来。我试图用wait.result.阅读未来,但这wait.result期待的对象。如果传递Future对象,它将引发编译器异常。请帮忙。

public Result invoke(String message) {

try {
    System.out.println("invoke ");
    MySampleMessage msg = new MySampleMessage(message);
    System.out.println(msg.getMessage());
    Future<Object> futr = (Future<Object>) Patterns.ask(myActor, msg, localConfig.getTimeOut());
    System.out.println("invoke 1");
    ////Promise<Object> promise = Promise.wrap(futfure);

    String msg1 = Await.result(futr, Duration.create(10, TimeUnit.MILLISECONDS));
    System.out.println("invoke 2 ");
    return  play.mvc.Results.ok("Success " + msg1);
}
catch(Exception e)
{
    return (play.mvc.Results.ok("Exception"));
}

}

有没有其他方法可以解析来自async参与者的响应?

共有2个答案

璩慎之
2023-03-14

我找到了一种解析演员反应的方法。创建一个函数,包装你的未来,并将其映射到一个函数,该函数将检查响应的实例类型并返回结果。下面是工作代码片段。

Future<Object> futre = (Future<Object>) Patterns.ask(myActor, msg,      localConfig.getTimeOut());

F.Function<Object, Result> function = new F.Function<Object, Result>()
{
    public Result apply(Object response)
    {
        String s = String.valueOf(response);
        if(response instanceof String) return play.mvc.Results.ok(s);
        else  return play.mvc.Results.ok("fail");
    }
};

return Promise.wrap(futre).map(function);
常朗
2023-03-14

必须小心标准java类型和Akka类型之间的名称冲突。例如,Java有一个Java。util。同时发生的未来的类型,而阿克卡的模式。ask()返回一个akka。派遣未来

检查您的演员表到Future

 类似资料:
  • 我想运行相同类型的任务(工作线程),但一次不超过一定数量的任务。当任务完成时,其结果是新任务的输入,然后可以启动该任务。 有没有好的方法可以在C 11中使用异步/未来范式来实现这一点? 乍一看,它看起来很简单,你只是生成多个任务: 然后,运行以获取任务的异步结果。 然而,这里的问题是,未来的对象必须存储在某种队列中并一个接一个地等待。但是,可以一遍又一遍地迭代未来的对象,检查它们中的任何一个是否准

  • 问题内容: 我有一种返回List期货的方法 现在,我要等待,直到所有期货都成功完成处理,或者所有由期货返回输出的任务都引发异常。即使一项任务引发异常,也没有必要等待其他期货。 简单的方法是 但是这里的问题是,例如,如果第4个期货抛出异常,那么我将不必要地等待前3个期货可用。 如何解决呢?会以任何方式倒计时闩锁帮助吗?我无法使用Future,isDone因为Java文档说 问题答案: 你可以使用Co

  • 我通读了Dart/flatter中的Async/Await/then,试图理解为什么aysnc函数中的Await不会等到完成后再继续。在我的UI中,有一个按钮调用一个异步方法来返回一个位置,该位置总是返回null,并且不等待函数完成。 该函数将调用推送到一个新的UI页面,该页面选择一个位置,并应返回一个结果。如何使该函数等待结果?我不是在使用异步吗?

  • 我正在尝试将数据库调用移出控制器,以清理并使其可测试。当它们在控制器中时,一切都会顺利进行。我将它们移出控制器,并添加了一个异步,以确保我们等待。否则,我将调用的中的函数。现在,一旦我使用async/await,控制器中的函数就会认为没有用户,因为它没有等待。 有几个关于异步等待的SO问题,但我没有找到一个解决我的问题。我确实验证了返回了我的用户,并添加了控制台日志来显示路径。 节点猫鼬异步等待似

  • 问题内容: 我有一个对象列表。对象将传递给延迟函数。我只想在上一次调用解决后才使用下一个对象调用函数。有什么办法可以做到吗? 问题答案: 在ES2017之前和之后(请参见下文中的ES2017中的选项),如果要等待诺言就不能使用,因为诺言没有阻塞。Javascript和Promise不会那样工作。 您可以链接多个promise,并使promise基础结构对它们进行排序。 您可以手动进行迭代,并且仅在

  • 是否有一种方法可以尝试等待一段时间,然后返回不同的结果,而不取消超时后的未来? 我有一个服务(我们称之为),它跑出去做自己的事情。它返回一个结果: 我愿意[阻止并]等待它一小段时间(比方说2秒)。如果它没有完成,我希望返回一个不同的结果,但我希望服务继续做它自己的事情。然后查询服务是否完成(例如,通过websockets或其他方式)将是客户端的工作。 即。我们有以下几个案例: 花费%1 s并完成其