gpt4 book ai didi

scala - 玩2.1 Scala链上多个futures和promises

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

我有一个现有的 java 类来处理数据。我如何在我的 Scala 异步操作中使用第一个 promise 中的 ObjectNode 以及更多处理?

public class JavaClass extends Controller {
public static Promise<ObjectNode> intensiveComputation(String imageId) {
}
}


def index = Action {
val futureInt = scala.concurrent.Future { JavaClass.intensiveComputation() }
Async {
futureInt.map(promise =>
var objJs = promise.GetObjectNodeFromPromise()
(objJs \ Config.RESP_STATUS_PARAM).as[String] match {
// I WANT TO READ ObjectNode from promise and do more works here
}
Ok(Json.toJson(Map("status" -> "ok")))
}
}

EDIT 1

我尝试使用@hbf 代码,但是,我在这一行遇到了编译错误。

[error]  found   : org.codehaus.jackson.node.ObjectNode => play.api.mvc.SimpleResult[play.api.libs.json.JsValue]
[error] required: play.libs.F.Function[org.codehaus.jackson.node.ObjectNode,?]
[error] var result = futureObj map { objJs: ObjectNode =>

如果我从 objJs 中删除 ObjectNode,我会收到此错误。

[error]  missing parameter type
[error] var result = futureObj map { objJs =>

新代码

def index = Action {
val futureInt = JavaClass.intensiveComputation()
Async {
var result = futureObj map { objJs: ObjectNode =>
Ok(Json.toJson(Map("status" -> "ok")))
}
result
}

最佳答案

我假设您正在关注 Play documentation guide ,对吧?

首先,请注意 Play 现在(从 2.1 版开始)使用 Scala future ,因此,命名法发生了变化:您的方法 intensiveComputation()返回 (Scala) Future<ObjectNode> (在 pre-2.1 中,这被称为 Promise<ObjectNode> )。

public class JavaClass extends Controller {
public static Future<ObjectNode> intensiveComputation(String imageId) {
/* ... */
}
}

另请注意,在 Play documentation example 中, intensiveComputation()直接返回值(即 ObjectNode ),而您的版本返回持有该值的 future (即 Future<ObjectNode> )。

其次,在你的futureInt.map ,闭包接收 future 的值(value)而不是 future 本身。所以尝试这样的事情:

def index = Action {
val futureInt = JavaClass.intensiveComputation() // I's already a future!
Async {
futureInt.map(objJs => // `objJs` is the result of `intensiveComputation`
// Extract from `objJs` whatever you need ...
// ... and make the `Ok` call here (and not outside)
Ok(Json.toJson(Map("status" -> "ok")))
)
}
}

关于scala - 玩2.1 Scala链上多个futures和promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15132769/

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