[英]F.Promise<Result> and nested async promises
我在Playframework 2.4.6的異步操作中使用了F.Promise。 我可以接到異步調用來運行我的DAO。 我可以使用“地圖”和“ flatMap”,但不確定以下情況。
我有一個異步調用來從數據庫中查找和對象。 如果找到了該對象,那么我想使用該對象的一部分,然后發出另一個異步請求以更新數據庫中的該對象。 這是控制器中異步更新調用的一部分。 我沒有做正確的事。
我將從以下內容開始。
F.Promise<User> findUserPromise = userService.findAsync(id);
F.Promise<User> updateUserPromise = userService.updateAsync(updatedUser);
F.Promise<Result> resultPromise = findUserPromise.flatMap((foundUser){
// update foundUser with passed in Json criteria
foundUser.firstName = firstName; // etc...
return updateUserPromise.map((updatedUser) -> {
return ok(Json.toJson(u));
});
});
return resultPromise;
這似乎不起作用。 在收到findUserPromise的響應之前,我不想定義我的UpdatedUserPromise,因為可能找不到用戶。 如果找不到用戶,我將返回F.Promise.pure(notFound(“ some json result”))。 如果找到了用戶,那么我想使用發布到我的控制器操作中的Json標准來更新該用戶。 使用我的方法,似乎必須先使用對象(updatedUser)定義updateUserPromise的異步調用,然后才能獲取任何結果。
我可以在承諾結果中定義另一個承諾嗎?
我在想這樣的事情,但是由於編譯錯誤而失敗了。 推斷變量B具有不兼容的范圍,相等性約束:play.mvc.Result,下限:Play.libs.F.Promise。
F.Promise<User> findUserPromise = userService.findAsync(id);
F.Promise<Result> resultPromise = findUserPromise.map((foundUser) -> {
// foundUser is returned, now update it, or return not found...
// define our next promise with an updated foundUser object
F.Promise<User> userPromise = userService.updateAsync(foundUser);
F.Promise<Result> resultPromise2 = userPromise.map((u) -> {
return jsonResult(ok(Json.toJson(u)));
});
return resultPromise2;
});
return resultPromise;
謝謝你的幫助。
我不確定這是否是執行此操作的最佳方法,但這對上面的情況有效。
F.Promise<User> findUserPromise = userService.findAsync(id);
return findUserPromise.flatMap((fu) -> {
if (fu == null) {
ObjectNode result = Json.newObject();
result.put("error", "Not found " + id);
return F.Promise.pure(jsonResult(notFound(result)));
}
// dynamically update fields on found user
fu.userName = userName;
fu.firstName = firstName;
// more updates...
// make a new promise that will use the updated foundUser object
F.Promise<User> updateUserPromise = userService.updateAsync(fu);
return updateUserPromise.map((uu) -> {
return jsonResult(ok(Json.toJson(uu)));
});
}
我發現的所有用於鏈接promise或嵌套promise的示例,它們似乎都使用Web服務作為示例,並且它們在設計時似乎都是眾所周知的。 在我的情況下,在返回之前,我不知道我的foundUser對象將是什么,因此我需要在外部Promise中創建我的內部Promise。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.