Я пытаюсь запланировать серию загрузок изображений. Я хочу вызывать scheduleImagesDownload
столько раз, сколько захочу, но дождусь выполнения кода внутри downloadImages
только после завершения предыдущего вызова.
Я пытаюсь получить и загрузить изображения с камеры для определенного идентификатора, как только все изображения будут загружены для этого идентификатора, я хочу начать загрузку изображений для следующего идентификатора и т. Д.
У меня трудные времена, потому что даже при использовании Serial Scheduler все подписки вызываются сразу, до завершения предыдущей загрузки. Мне было интересно, есть ли способ сделать это с чистым Rx, без использования семафоров и т. Д.
Заранее спасибо!
func scheduleImagesDownload(flightId: String) -> Disposable {
let subscription = donwloadImages(flightId)
.subscribeOn(SerialDispatchQueueScheduler(qos: .background))
.subscribe(onCompleted: {
/// Finished downloading images for flight.
}, onError: { error in
/// Error downloading images for flight.
})
return subscription
}
func donwloadImages(_ flightId: String) -> Completable {
return Completable.create { completable in
/// Simulate querying the drone for images to download async and start downloading them.
DispatchQueue.global().async {
sleep(5) // Sleep to simulate downloading time.
completable(.completed) // Finished downloading.
}
return Disposables.create()
}
}