私はページ分割されたリソースを返すサービスを使用しています。ページの内容を非同期に取得されページ分割されたIterable [T]を連続Iterable [T]のように消費します。
/**
* A page of contents that are retrieved asynchronously from their origin
*
* @param content The resource object
* @param nextPageCursor The token representing the next page, or empty if no more pages to consume
* @tparam T The type of resource withing the page
*/
case class AsyncPage[T](
val content: Future[Iterable[T]],
val nextPageCursor : Future[String]
) { }
:getPage
関数は次のように実装されAsyncPage[T]
オブジェクトを返す
trait Service {
getPage(pageSize: Int, pageCursor: String): AsyncPage[Resource]
}
:これは、以下のインターフェースによって定義される単一の呼び出しを公開しますサービスが使用するいずれのストレージシステムからでも使用できます。
私のアプリケーションの必要性のため、私は実際にページを気にしません。あたかも単一のサービスであるかのようにサービスのリソースを消費できるようにコード化したいと思います。Iterable[T]
しかし、私はサービスの怠惰を維持したいです。私は必要以上のページを要求したくありません。つまり、前のページのすべての要素を消費しない限り、次のページをリクエストしたくないということです。私は1つのページの全体Iterable[T]
を消費しているときはいつでも
、私はコードがgetPage(...)
機能を使用して、次のページを要求したい、と最後のページnextPageCursor
からpageCursor
パラメータを提供します。
これを達成する方法を教えてもらえますか?あなたがブロックし気にしない場合
これらの 'Future'sの' Iterable [T] 'ブロックはどうでしょうか?さもなければ、あなたができることは、Iterable [Future [Iterable [T]]です。 –
私のアプリケーションはアクターアクターモデルフレームワークに基づいています。これはアクタースレッドをブロックすることを嫌がり、純粋に非同期で動作するように指示します。 –