1

これまで解決できなかった問題があります。RxKotlin は初めてなので、簡単かもしれません。コードを見てください:

    override fun infos(): Stream<Info> =
        client.infoAboutItem(identifier)
                .map {
                    val itemId = it.itemId ?: ""
                    val item = client.itemForId(itemId)
                    ClientInfo(client, it, source, item) as Info
                }
                .let { AccessStream(it) }

ストリームは自作のコレクションです。Map は、そのコレクション内のすべてのアイテムを反復処理できるようにするメソッドです。

ここでの問題は、

 client.itemForId(itemId)

理想的ではない Single を返す http 呼び出しです。

Single ではなく Item を返し、それを ClientInfo に渡す非同期呼び出しをマップ内に作成したいと思います。私がこれまでに試したことは、マップ内でサブスクライブを使用し、blockingGet() メソッドを使用することでしたが、これは別のスレッドで観察してサブスクライブしてもメインスレッドをブロックします

したがって、コレクション内のすべてのものに対して非同期呼び出しを行う必要があります。

手伝ってくれてありがとう

4

2 に答える 2

1

返そうとするObservable<Stream<Info>>と、次のようになります。

   override fun infos(): Observable<Stream<Info>> = 
                Observable.from(client.infoAboutItem(identifier))
                        .flatMapSingle {
                            val itemId = it.itemId ?: ""
                            client.itemForId(itemId)
                        }
                        .map { 
                            ClientInfo(client, it, source, item) as Info
                         }
                        .toList()
                        .flatMap {
                            AccessStream(it)
                        }
于 2017-08-31T07:33:04.863 に答える