【问题标题】:Debugging Futures and Iteratees in Play 2.2在 Play 2.2 中调试 Futures 和 Iteratee
【发布时间】:2013-11-03 14:50:17
【问题描述】:

我的 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 代码并看到它被调用了。只需处理 1 个块,因此速度很快。我还在控制台中看到了枚举器和迭代调试 stmts。我只是不知道为什么它没有完成:

[debug] application - Pushing 1
[debug] application - Pushed 1
[debug] application - appending subj
[debug] application -  subj appended

【问题讨论】:

    标签: scala playframework playframework-2.2


    【解决方案1】:

    显然,如果您忘记正确结束枚举器,Play 中没有太多反馈。您必须致电:

    pushee.end
    

    pushee.eofAndEnd
    

    触发枚举器关闭和Future完成。

    【讨论】:

      猜你喜欢
      • 2013-09-25
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 2012-04-27
      相关资源
      最近更新 更多