1
我的堆棧是:斯卡拉2.11.6,ReaciveMongo 0.11.6,播放2.4.2,3.0.4蒙戈如何有條件地在現有階枚舉添加新的普查員
我有疑問的列表蒙戈,這我需要一個接一個地有條件地執行(如果結果的數量少於MAX可能)。
作爲一種解決方案我做以下:
possibleQueries.
// find returns Enumerator[JsObject]
map(query => searchableCollection.find(query)).
// combine Enumerators with andThen
foldLeft(Enumerator.empty[JsObject])({ (e1, e2) => e1.andThen(e2) }) through
// Take only specified amount of suggestions
take[JsObject](MAX_AMOUNT)
- 聯合查詢與andThen組合物
- 限制與Enumeratee.take [INT](N)結果數量。
這裏的問題是,它急切地搜索數據與searchableCollection.find(查詢)(也許我是錯的),並且可能甚至不取指返回的結果,如果之前的查詢返回的結果MAX_AMOUNT 。
如何重寫此項,以便僅在前面的Enumeration尚未填充MAX_AMOUNT響應時調用搜索?
UPDATE
我去解決的辦法是
implicit class EnumeratorExtension[E](parent: Enumerator[E]) {
/**
* Create an Enumeratee that combines parent & e if parent was empty.
*/
def andIfEmpty(e: => Enumerator[E]): Enumerator[E] = new Enumerator[E] {
def apply[A](i: Iteratee[E, A]): Future[Iteratee[E, A]] = {
var empty = true
parent.
map(e => {
empty = false
e
})(defaultExecutionContext).
apply(i).
flatMap(r => {
if (empty)
e.apply(r)
else
Future.successful(r)
})(defaultExecutionContext)
}
}
}