私はアイテムを放出し、それらをサーバにアップロードするオブザーバブルを持っています。ここでRxJava 2 flatMapCompletableで観測できません
はコードです:
repository
.getItems()
.doOnComplete(() -> Log.d(TAG, "No items left."))
.flatMapCompletable(item ->
repository
.uploadItems(item)
.onErrorComplete()
.andThen(
deleteTemporaryItem()
.onErrorComplete()
)
);
getItemsメソッドは、アイテムを一つずつを発し、その後、完了、uploadItems方法は、サーバーにアップロードします。問題は、すべてのチェーンonCompleteイベントが正常に機能し、すべての購読者がこのイベントを取得して処理を進めるが、いくつかのアイテムがあり、すべてがonCompleteイベントがアップロードされたときに.doOnComplete() - > Log.d(TAG、 "No items left。"))メソッドであり、すべてのサブスクライバはこのイベントを取得しません。私はonErrorCompleteを追加して、uploadItemsの後のすべてのメソッドが完了し、すべてのメソッドが完了していることをログで確認しましたが、repository.getItems()のonCompleteイベントはすべてのサブスクライバに渡されません。
誰でもこの現象が発生する原因を突き止めてください。
ありがとうございます!
申し訳ありませんが、私は問題が何かを得ることはありません。使用したメソッドの問題とメソッドシグネチャに関する詳細情報を提供してください。 –
@HansWurstこんにちは!私はちょうど質問を編集しました!ご注意いただきありがとうございます! –
私はいくつかの誤解があると思います。 observableが終了したら、DoOnCompleteが呼び出されます。 observableは、getItems()から生成されたすべての値が処理された場合にのみ終了します。すべてのアイテムがCompleteable.completeで終了すると、オブザーバブルは完了します。フラットマップされた1つのアイテム(アップロードするラージファイル)が処理されていないように見えます。 –