У меня есть метод, который возвращает Future:
func getItem(id: String) -> Future<MediaItem, Error> {
return Future { promise in
// alamofire async operation
}
}
Я хочу использовать его в другом методе и преобразовать MediaItem
в NSImage
, что является синхронной операцией. Я надеялся просто сделать map
или flatMap
в исходном Future, но он создает длинный Publisher, который я не могу стереть до Future<NSImage, Error>
.
func getImage(id: String) -> Future<NSImage, Error> {
return getItem(id).map { mediaItem in
// some sync operation to convert mediaItem to NSImage
return convertToNSImage(mediaItem) // this returns NSImage
}
}
Я получаю следующую ошибку:
Cannot convert return expression of type 'Publishers.Map<Future<MediaItem, Error>, NSImage>' to return type 'Future<NSImage, Error>'
Я пытался использовать flatMap
, но с похожей ошибкой. Я могу eraseToAnyPublisher
, но я думаю, что это скрывает тот факт, что getImage(id: String
возвращает будущее.
Полагаю, я могу обернуть тело getImage
в будущем, но это не так чисто, как сцепление и картирование. Любые предложения приветствуются.