Scala 重头戏2.3-从异步更改为WebSocket.tryAccept
我是Scala的新手,所以我认为这可能是一个非常小的问题 我目前正在尝试将Scala 重头戏2.3-从异步更改为WebSocket.tryAccept,scala,playframework,Scala,Playframework,我是Scala的新手,所以我认为这可能是一个非常小的问题 我目前正在尝试将chat方法从使用不推荐的WebSocket.async更改为WebSocket.tryaaccept。该应用程序使用在上找到的示例聊天 我在创建该方法所需的复杂Future类型时遇到问题 这是老办法: def chat() = WebSocket.async[JsValue] { request => ChatRoom.join("User: 1") } 新方法: def chat2(
chat
方法从使用不推荐的WebSocket.async
更改为WebSocket.tryaaccept
。该应用程序使用在上找到的示例聊天
我在创建该方法所需的复杂Future
类型时遇到问题
这是老办法:
def chat() = WebSocket.async[JsValue] {
request =>
ChatRoom.join("User: 1")
}
新方法:
def chat2() = WebSocket.tryAccept[JsValue] {
request =>
try {
// ChatRoom.join returns (iteratee,enumerator)
ChatRoom.join("User: 1").map(e => Right(e))
} catch {
case e: Exception =>
Left(Ok("Failed")) // Error here
}
}
我的错误消息:
找到:左[结果,无]
必需:Future[Result,(Iteratee[JsValue,382;],Enumerator[JsValue])]
我不知道我该如何为如此简单的消息创建如此复杂的结果
虽然
ChatRoom.join(“User:1”).map(e=>Right(e))
现在没有显示任何错误,但我不确定这是否是正确的实现 我目前没有在IDE前面,所以我无法完全回答,但它要求的返回类型并不像看上去那么复杂。“要么”是“左”或“右”,就像“选项”是“某些”或“无”一样。因此,它所要求的是一个未来(Websocket.async也应该需要这个未来),它包含一个左[结果]——连接失败案例,或者一个右[(迭代器,枚举器)]——成功案例。假设Chatroom.join返回一个Future[(Iteratee,Enumerator)],映射操作只是将其包装在“Right”中。我要做的第一件事是在将来包装左(Ok(“Failed”)),看看会发生什么。在未来{…}
中包装左返回有效。我以前曾尝试将整个请求包装在一个将来的文件中,但没有成功。谢谢