Scala 如何将akka中的T类对象转换为未来的[T]对象

Scala 如何将akka中的T类对象转换为未来的[T]对象,scala,akka,akka-http,Scala,Akka,Akka Http,我正在尝试用akka和scala做一些事情,我是新手。我想将“任意”未来的结果附加到类中的一个字段中 所以我把一个叫做T的类定义为 class T { var a: String =_ var result = List[Any]= List() } 现在我有一个变量,它接收未来值 var futureResult:Future[Any] = //receives a future value 在一个名为addResult的函数中,它接受一个T对象并返回一个未来的T对象 def ad

我正在尝试用akka和scala做一些事情,我是新手。我想将“任意”未来的结果附加到类中的一个字段中

所以我把一个叫做T的类定义为

class T {
  var a: String =_
  var result = List[Any]= List()
}
现在我有一个变量,它接收未来值

var futureResult:Future[Any] = //receives a future value
在一个名为addResult的函数中,它接受一个T对象并返回一个未来的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(_))

您可以按如下方式更改注释行:

futureResult.map { res =>
  obj2.result = res :: obj2.result
  obj2
}
Future {
 new T("some string", 1 :: 2 :: 3 :: Nil)
}

然后您就不需要最后一行了。

首先,正如@riccardo.cardin所指出的,使用
t
作为类的名称是非常糟糕的,因为
t
通常指向泛型。 但是,您可以通过一个简单的闭包将任何逻辑放入
Future
,在您的情况下,它如下所示:

futureResult.map { res =>
  obj2.result = res :: obj2.result
  obj2
}
Future {
 new T("some string", 1 :: 2 :: 3 :: Nil)
}
在此之后,您可以通过
flatMap
map
或与
组合异步计算,以获得全面的
,甚至可以使用
cats
@

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

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

f1您可以在Future上使用map函数来更改内部内容。类似于
retrieveResult:Future[Any]->map((result:Any->addResult:T)):Future[T]
调用
map
不会“更改内部内容”它创建了一个新的
未来
@YuvalItzchakov T只是一个类名。对不起,我认为
T
是一个泛型类型参数。
T
对于一个类来说是一个非常糟糕的名称…我实际上需要最后一行,因为它在一个流中使用,并且必须在下一个开始执行之前完成该阶段。
map
.Btw如果您打算从其他地方使用
obj2
(即,不在本地方法中创建它),您将在货币方面遇到许多其他问题。