gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:08:34 25 4
gpt4 key购买 nike

我正在尝试使用 akka 和 scala 做一些事情,但我是新手。我想将“Any”Future 的结果附加到类(class)的其中一个字段中

所以我将名为 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)
}

之后,您可以通过flatMapmapfor comprehensive组合异步计算,甚至使用cats black magic使用|@|:

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

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com