2013-10-24 33 views
1

我在Play 2.2應用程序中遇到了一些奇怪的行爲,我不知道如何去調試它。我的代碼運行良好,直到我開始使用迭代。調試遊戲中的期貨和迭代器2.2

我的角色建立一個枚舉像下面並將其發送回給調用者:

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超時:

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) 
      } 

主叫然後通過消耗它。我已經遍歷迭代代碼並看到它被調用。只有一個塊要處理,因此速度很快。我也看到枚舉器並在控制檯中迭代調試stmts。我只是不知道它爲什麼沒有完成:

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

回答

2

顯然,如果您忘記正確結束您的枚舉器,Play中沒有太多反饋。你必須調用:

pushee.end 

pushee.eofAndEnd 

觸發枚舉關閉和未來完成。