我的Play 2.2应用程序中有一些奇怪的行为,我不知道如何调试它。我的代码运行正常,直到我开始使用iteratees。
我的演员创建一个类似下面的枚举器并将其发送回调用者:
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)
问题是Await.result超时。我已经逐步完成了iteratee代码,看到它被调用了。只有一个块可以处理,所以它很快。我还在控制台中看到了枚举器和iteratee调试stmts。我只是不知道它为什么没有完成:
[debug] application - Pushing 1
[debug] application - Pushed 1
[debug] application - appending subj
[debug] application - subj appended
答案 0 :(得分:2)
显然,如果您忘记正确结束调查员,Play中没有太多反馈。你必须致电:
pushee.end
或
pushee.eofAndEnd
触发枚举器关闭,Future完成。