3
我有一個現有的Java類來處理數據。我如何從第一次承諾中使用ObjectNode,並在我的Scala異步操作中使用更多處理?玩2.1斯卡拉連鎖多期貨和承諾
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")))
}
}
編輯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
}
我試圖futureInt.map(objJs =>不過,我得到這個錯誤[錯誤]研究發現: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 ,?] – angelokh 2013-02-28 20:55:29
還值得一提的是,只需通過Google搜索「Scala Async 「當你第一次打到Play 2.0的文檔時,你會得到這樣的結果,似乎Play在2.1(從Promise [T]到Future [T])中戲劇性地改變了異步編程的概念,所以這些文檔已經過時了。 – 2013-07-19 07:12:03