我正在尝试遵循wiki
中的异步迭代器示例我收到以下错误:
值slice不是play.api.libs.iteratee.Enumerator
的成员
对此问题的任何意见都表示赞赏。
这样我就可以从大型集合中分页结果
for (int i = 0; i < pages.Count; i++)
{
if (pages[i].Count < INTERFACES_PER_PAGE)
{
pages[i].Add(interfaceToAdd);
}
else
{
pages.Add(new List<UserInterface>());
pages[i + 1].Add(interfaceToAdd);
}
}
libraryDependencies ++= Seq(
"com.websudos" %% "phantom-dsl" % 1.22.0,
"com.websudos" %% "phantom-reactivestreams" % 1.22.0
)
答案 0 :(得分:3)
语法略有错误,当您想在枚举器上使用方法时,您需要的是什么:
abstract class ConcreteBlocksModel extends BlocksModel with RootConnector {
override val tableName = "blocks"
def getBlocks(start: Int, limit: Int): Future[Iterator[Block]] = {
select.fetchEnumerator run Iterator.slice(start, limit)
}
}
如果您想对您的记录进行分页,可以采用不同的方式在Cassandra中进行自动分页。
def getPage(limit: Int, paging: Option[PagingState] = None): Future[ListResult[JodaRow]] = {
select.limit(limit).fetchRecord(paging)
}
基本上你需要为下一个要运行的查询提供分页状态。现在返回的Future
将在其中包含ListResult
项,这意味着您将获得2种方法:
def records: List[R] // the list of records from the db, just like fetch()
def pagingState: PagingState // the state you care about.
基本上pagingState
有一个toString
方法,它会返回一个您需要存储在客户端的令牌。当用户想要获得下一页&#34;时,您需要提供上一页的pagingState
字符串,将分页状态视为指向Cassandra表中特定位置的指针,所以Cassandra知道如何跳跃&#34;或&#34;跳过页面&#34;。
因此,假设您从第0页开始,您的下一个API调用应该包含pagingState
作为字符串。
然后你可以PagingState.fromString(pagingState)
传递结果,以获得&#34;下一页&#34;。
我将在幻像中添加一个这样的例子,但这基本上可以解决你当前的问题。