У меня есть конвейер в ReactiveSwift для загрузки. Я хочу убедиться, что даже в случае сбоя одной из загрузок остальные не будут прерваны.
После того, как все они завершились успешно или неудачно, я должен либо вернуть успех из метода performUploads
, либо, если какой-либо из них не удался, я должен вернуть ошибку, поэтому следующий шаг, часть загрузки, не начнется. Даже если есть ошибки, у всех загрузок должна быть возможность загрузиться, их нельзя останавливать.
Есть ли способ выяснить, есть ли какие-либо ошибки после завершения загрузки? Смотрите методы здесь:
let pendingUploadItemsArray: [Items] = ...
func performUploads() -> SignalProducer<(), MyError> {
return upload(pendingUploadItemsArray)
.then(doAnything())
}
private func upload(_ items: [Items]) -> SignalProducer<Signal<(), MyError>.Event, Never> {
let producers = items
.filter { item in
return item.readyForUpload
}
.map { self.upload($0).materialize() }
return SignalProducer.merge(producers)
}
private func upload(_ item: Item) -> SignalProducer<(), MyError> {
return internalUploader.upload(item)
.on(failed: failedToUpload(item),
value: successfullyUploaded(item))
.ignoreValues()
}
где метод загрузки internalUploader
:
func upload(_ item: Item) -> SignalProducer<Any, MyError>
А затем в другом классе вы бы назвали этот загрузчик:
let sync = self.uploader.performUploads()
.then(startDownloads())
startDownloads
следует запускать только в том случае, если все загрузки завершились успешно. Спасибо за любое понимание.
Это может быть что-то, что должно быть сделано совершенно по-другому.