Scala 在Play 2.2中调试期货和迭代对象
我的Play 2.2应用程序中有一些奇怪的行为,我不知道如何调试它。在我开始使用iteratees之前,我的代码一直运行良好 My actor创建一个枚举器,如下所示,并将其发送回调用方:Scala 在Play 2.2中调试期货和迭代对象,scala,playframework,playframework-2.2,Scala,Playframework,Playframework 2.2,我的Play 2.2应用程序中有一些奇怪的行为,我不知道如何调试它。在我开始使用iteratees之前,我的代码一直运行良好 My actor创建一个枚举器,如下所示,并将其发送回调用方: val emailFeed = Concurrent.unicast[Message] ( onStart = { pushee => { log.debug("Pushing 1") pushee.pu
val emailFeed = Concurrent.unicast[Message] (
onStart = {
pushee => {
log.debug("Pushing 1")
pushee.push(messages.apply(0))
log.debug("Pushed 1")
}
},
onComplete = {
log.debug("Done with pushee")
},
onError = {
(msg, in) => log.error(msg)
}
然后调用方通过以下方式使用它:
f.map { reply =>
val emailFeed = reply.asInstanceOf[Enumerator[Message]]
val iter = Iteratee.fold[Message,String] ("") {
(result, msg) => {
Logger.debug("appending subj")
result ++ msg.getSubject()
Logger.debug(" subj appended")
result
}
}
val result: Future[String] = emailFeed |>>> iter
Await.result(result, 10 minutes)
问题正在等待。结果超时。我已经遍历了iteratee代码,并看到它被调用。只有1个块需要处理,因此速度很快。我还可以在控制台中看到枚举器和迭代器调试stmts。我只是不知道为什么它没有完成:
[debug] application - Pushing 1
[debug] application - Pushed 1
[debug] application - appending subj
[debug] application - subj appended
显然,如果您忘记正确结束枚举器,那么就不会有太多反馈。你必须致电:
pushee.end
或
触发枚举器关闭并完成未来
pushee.eofAndEnd