[英]Type mismatch issue
我正在播放2.3,我想在插入另一个收藏集的同时更新一个收藏集。 下面是引发错误的代码。
def create(message : MessageThread) : Future[reactivemongo.core.commands.LastError] = {
collectionThread.insert(message.copy(
createDate = Some(new DateTime()),
updateDate = Some(new DateTime())
))
}
def updateMessage(messageId : JsValue) : Future[reactivemongo.core.commands.LastError] = {
collection.update(Json.obj("_id" -> (Json.obj("$oid" -> messageId))),
Json.obj("$set" -> Json.obj("isRead" -> false,
"lastRepliedDate" -> Some(new DateTime()))))
}
def createThread = Action.async(parse.json) { request =>
request.body.validate[MessageThread].flatMap { message =>
create(message).flatMap { created =>
updateMessage(request.body \ "messageId").flatMap{ updated =>
Created
}
}
}.getOrElse(Future.successful(BadRequest("invalid json")))
}
我正在调用update并从createThread创建。 我无法将结果发送回去
错误如下
type mismatch;
found : controllers.Messages.Status
required: scala.concurrent.Future[?]
由于我还学习scala
还很早。 任何帮助将不胜感激。
我无法尝试您的代码,因此我必须在内部进行编译 。 也就是说,在我看来问题出在这里:
request.body.validate[MessageThread].flatMap { message =>
create(message).flatMap { created =>
updateMessage(request.body \ "messageId").flatMap { updated =>
Created
}
}
}
代替第三个flatMap
try map
,如下所示:
request.body.validate[MessageThread].flatMap { message =>
create(message).flatMap { created =>
updateMessage(request.body \ "messageId").map { updated =>
Created
}
}
}
实际上,由于似乎您没有使用created
和updated
,因此可以使用:
request.body.validate[MessageThread].flatMap { message =>
create(message).flatMap { _ =>
updateMessage(request.body \ "messageId").map { _ =>
Created
}
}
}
如果您愿意,可以使用同等的理解力:
for {
message <- request.body.validate[MessageThread]
_ <- create(message)
_ <- updateMessage(request.body \ "messageId")
} yield Created
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.