在Swift中通过Promise传递值



我有一个这样的承诺链

firstly {
Network.shared.getInfo()
}
.then { info in
Network.shared.getUserDetail(info)
}
.then { detail in
Network.shared.getAddOn(detail)
}
.done { addOn in
//do stuff with addOn
}
.catch { error in 
}

和我需要有所有的值(信息,细节和addOn)在.done承诺块。是否有一种方法可以扩展可见性或通过Promise传递值?

我不能使用when(fulfilled: []),因为每个值都依赖于前一个。

谢谢。

您可以通过将新值和前一个值包装在一个元组中,将前一个承诺的输入传播到下一个承诺。

firstly {
Network.shared.getInfo()
}
.then { info in
(info, Network.shared.getUserDetail(info))
}
.then { info, detail in
(info, detail, Network.shared.getAddOn(detail))
}
.done { info, detail, addOn in
//do stuff with addOn
}
.catch { error in 
}

或者,你可以改变你的方法来返回元组本身,或者返回一个包含输入参数和新生成的返回值的类型。

例如,将Network.shared.getUserDetail(info)从只返回UserDetail改为返回(UserInfo, UserDetail)

你需要创建变量来分配你的值,例:

var info: Info
var detail: Detail
var addOn: AddOn
firstly {
Network.shared.getInfo()
}
.then { info in
self.info = info
Network.shared.getUserDetail(info)
}
.then { detail in
self.detail = detail
Network.shared.getAddOn(detail)
}
.done { addOn in
self.addOn = addOn
//do stuff with addOn
}
.catch { error in 
}

最新更新