RxJava2 - Как узнать, когда все операции concatMapSingle закончили на итерации Observable - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть метод ниже:

private fun bindUploadPhotos(uploadPhotoCommands: List<UploadPhotoCommand>): Disposable {
    return Observable.fromIterable(uploadPhotoCommands)
            .concatMapSingle { param ->
                requestUploadPhoto.getSingle(param)
            }
            .doFinally {
                onAllPhotosUploaded()
            }
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                onPhotoUploaded()
            }
}   

Я загружаю фотографии последовательно. Я ожидаю, что doFinally выполнится после успешной загрузки всех фотографий. Тем не менее, он выполняется немедленно.

Я не мастер RxJava2, поэтому я с радостью принимаю ваши разные подходы для достижения моей цели.

1 Ответ

3 голосов
/ 06 февраля 2020

onComplete вызывается, когда все ваши фотографии загружены. так что звоните onAllPhotosUploaded туда

private fun bindUploadPhotos(uploadPhotoCommands: List<UploadPhotoCommand>): Disposable {
    return Observable.fromIterable(uploadPhotoCommands)
            .flatMapSingle { param ->
                requestUploadPhoto.getSingle(param)
            }.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe ({onPhotoUploaded},{},{onAllPhotosUploaded()})
}   
...