无法在处理程序中获取数据何时(已解决:)
Posted
技术标签:
【中文标题】无法在处理程序中获取数据何时(已解决:)【英文标题】:Cannot get data in handler for when(resolved:) 【发布时间】:2018-06-28 12:20:29 【问题描述】:PromiseKit 6
我有一个从数据库获取警报列表的函数,然后我需要使用每个数据库的 contentId 属性来获取内容并附加到适当的警报项。
也许有更好的方法,但现在,我想出的是将 Promise 收集到一个列表中,然后调用 when(resolved:)。我之所以选择它,是因为如果任何承诺失败,我希望能够返回所有可以通过的。
在函数 attachContents 中的 then 处理程序中,处理程序传递了这种类型 [Result],但是当我映射列表时我可以访问的唯一字段是 isFulfilled 我检查了 Result 是什么类型,发现了这个:
public enum Result<T>
case fulfilled(T)
case rejected(Error)
public extension PromiseKit.Result
var isFulfilled: Bool
switch self
case .fulfilled:
return true
case .rejected:
return false
它引导我找到第一个,在 Resolver.swift 中,所以我不确定为什么我无法通过调用已完成来获取数据
private func getContent(for alert: Model) -> Promise<ViewModel>
return firstly () -> Promise<Any> in
if let contentType = AlertContentType(rawValue: alert.type)
switch contentType
case .news:
return newsService.get(contentId: contentId, superareaId: superareaId).compactMap $0 as Any
case .insight:
return insightService.get(contentId: contentId, superareaId: superareaId).compactMap $0 as Any
else throw DataError.Missing(error: "Could not retrieve type!")
.compactMap content in
var viewModel = alert.toViewModel()
viewModel.content = content
return viewModel
private func attachContents(to alerts: [Model]) -> Promise<[ViewModel]>
return firstly () -> Guarantee<[Result<ViewModel>]> in
let contentPromises: [Promise<AlertViewModel>] = alerts.map
return self.getContent(for: $0)
return when(resolved: contentPromises)
.then (vModels: [Result<ViewModel>]) -> Promise<[OIAlertViewModel]> in
vModels.map (vm: Result<OIAlertViewModel>) in
// vm.isFulfilled is the only accessible property here
// can't call
【问题讨论】:
【参考方案1】:Result
是.fulfilled
或.rejected
的枚举
vModels.map (vm: Result<OIAlertViewModel>) in
switch vm
case .fulfilled(let alert):
print(alert)
case .rejected(let error):
print(error)
【讨论】:
以上是关于无法在处理程序中获取数据何时(已解决:)的主要内容,如果未能解决你的问题,请参考以下文章