scala - 如何在akka中将类T对象转换为Future[T]对象

标签 scala akka akka-http

我正在尝试用 akka 和 scala 做一些事情,但我对它很陌生。我想将“Any”Future 的结果附加到类中的一个字段中

所以我将名为 T 的类定义为

class T {
  var a: String =_
  var result = List[Any]= List()
}

现在我有一个接收 future 值的变量

var futureResult:Future[Any] = //receives a future value

在一个名为 addResult 的函数中,该函数接受一个 T 对象并返回一个 future 的 T 对象。

def addResult(obj1:T):Future[T] ={
  var obj2:T = new T()
  obj2.a = obj1.a
  obj2.result = obj1.result
  //I want to append results of futureResult into obj2.result when it is completed
  // obj2.result = futureResult :: obj2.result

  return Future(obj2)
}

我最终必须从流程中调用此函数。

val b = Flow[T].mapAsync[T](1)(addResult(_))

最佳答案

首先,正如 @riccardo.cardin 所指出的,使用 T 作为类名是非常糟糕的主意,因为 T 通常指向泛型。 但是,您可以使用简单的闭包将任何逻辑放入 Future 中,在您的情况下,它看起来像这样:

Future {
 new T("some string", 1 :: 2 :: 3 :: Nil)
}

之后,您可以通过 flatMapmap 或与 综合 结合异步计算,甚至使用 cats > black magic|@|:

for {
    f1 <- future1()
    f2 <- future2(f1.id)
} yield f2.name

(future1 |@| future2) map { _ - _ }

在您的情况下,这种转换取决于您的代码逻辑。

关于scala - 如何在akka中将类T对象转换为Future[T]对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46408785/

相关文章:

java - Akka Http 请求和响应模式

scala - Akka中的reference.conf与application.conf文件

scala - 使用 Akka 将文件从服务器流式传输到客户端

ruby-on-rails - 我想使用 EtherPad(或克隆)。我的网站正在运行 Ruby on Rails。 API 还是本地安装?

scala - 将列表拆分为列表列表

scala - Scala 中的 Cypher 查询

multithreading - 在实践中在哪里以及如何使用 Actor

scala - Play 2 - 在所有响应上设置标题?

akka - Actor 的行为应该在什么时候 split

scala - 使用与 100K Actor 共享的并发 HashMap 是否安全?