繁体   English   中英

类型不匹配问题

[英]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
      }
    }
}

实际上,由于似乎您没有使用createdupdated ,因此可以使用:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM