【发布时间】:2015-06-11 23:30:04
【问题描述】:
我试图弄清楚如何链接多个异步调用并返回结果。我目前正在尝试先异步用户数据,并异步更新用户数据并返回结果,但似乎它不起作用:( 我使用了 map { result => Ok(result)},但 play 仍然认为我正在返回一个对象。有什么帮助吗?
def updateUserData() = Action.async { implicit request =>
updateUserForm.bindFromRequest.fold(
errors => Future.successful(BadRequest(views.html.authenticated.settings.settings_hero(errors, Option(""), Option("")))),
{
case (userData) =>
request.session.get("email") match {
case Some(email) =>
getUser(email, userData.curent_password) map { userCheck =>
if (userCheck) {
updateUserOnService(email, userData.f_name, userData.l_name, userData.new_password) map { result =>
Ok("please")
}
//val e = updateUserOnService(email, userData.f_name, userData.l_name, userData.new_password) map {result => Ok("")}
// user is valid now update the user data
// call removeAuth to log out
// redirect to home
///Ok (updateUserOnService(email, userData.f_name, userData.l_name, userData.new_password) map { result => result})
//Redirect(routes.settings.index()).addingToSession("email" -> email)
} else {
BadRequest(views.html.authenticated.settings.settings_hero(updateUserForm.bindFromRequest.withGlobalError(Messages("error.login", email)), Option(""), Option("")))
}
}
}
})
}
我遇到的主要问题是这部分。我认为这是一些语法的问题。有人可以帮忙吗? 谢谢
updateUserOnService(email, userData.f_name, userData.l_name, userData.new_password) map { result =>
Ok("please")
}
【问题讨论】:
-
你能分享
getUser和updateUserOnService的方法签名(更具体地说是返回类型)吗?没有它,我们很难推断出我们头脑中的类型:) -
def updateUserOnService(email: String, firstName: String, lastName: String, n_password: String) = { WS.url("localhost:9000/settings/updateUser") .post(Map("email" -> Seq( email), "firstName" -> Seq(firstName), "lastName" -> Seq(lastName), "n_password" -> Seq(n_password))) }
-
def getUser(email: String, password: String) = { WS.url("localhost:81/authenticateUser") .post(Map("email" -> Seq(email), "password" -> Seq(password))) .map(response => response.body.contains("true")) }
-
对不起,我是个新手,所以我不知道如何编辑或重新格式化代码,以便你们更容易看到:(
标签: scala asynchronous playframework playframework-2.0