错误:在Phantom-DSL中实现异步迭代器时,“切片不是成员”

时间:2016-08-07 23:12:01

标签: scala phantom-dsl

我正在尝试遵循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 
)

1 个答案:

答案 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;。

我将在幻像中添加一个这样的例子,但这基本上可以解决你当前的问题。