我想要在Play 2中使用Iteratees來處理流式處理彗星的結果。我已經得到了處理從一個回調和枚舉從地圖創建一個枚舉。 我的問題是與Enumeratee.map,這需要一個函數,它接受一個純輸入並返回一個純輸出(例如doc中的字符串到INT轉換)。我想要做的是接受一個純粹的投入,並返回一個結果的承諾。 畢竟,一個枚舉器向枚舉器提供承諾,一個枚舉器將一個枚舉器轉換爲另一個枚舉器,所以應該有一種方法來創建映射到承諾的枚舉器。play2讓一個Enumeratee在另一個Promise中轉換一個Promise
現在讓我舉一個例子來說明這一點。假設我有一個http請求加入了一個要在我的數據庫中查詢的ID列表。假設這些id表示數據庫表中的行,並且請求在這些行上執行一組(長)計算,然後返回一組表示計算的json對象。 正如我一直堵的東西做,這將是冷靜,在一次流一個ID,所以我想有一個enumeratee管道,做:
- 查詢行中的數據庫(返回該行承諾)
- 使該行很長的計算(需要一個行並返回一個計算的承諾)
- 轉換長時間的計算,以JSON
- &>這一點通過播放所提供的彗星enumeratee 2
1很容易,我可以使用fromCallback構造一個枚舉器,它將返回查詢結果的承諾。 3也很容易,因爲它是一個簡單的Enumeratee.map
但我不能包裹我的頭圍繞如何實現第2步枚舉的applyOn。我可以理解,我有博建立一個新的迭代器從「內部」迭代器獲得承諾,flatMap計算並返回新的承諾。我沒有得到的是如何使這給予奇申applyOn簽名:def applyOn[A](it: Iteratee[To, A]): Iteratee[From, Iteratee[To, A]]
有人可以幫我嗎?
感謝
只是一個說明,在這個簡單的例子,我可以清楚地合併圖1和2以簡單的枚舉器,但真正的應用程序實際上有點複雜;) – Mortimer