Scala 在Play 2.2中调试期货和迭代对象

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

我的Play 2.2应用程序中有一些奇怪的行为,我不知道如何调试它。在我开始使用iteratees之前,我的代码一直运行良好

My actor创建一个枚举器,如下所示,并将其发送回调用方:

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