我有一个这样的承诺链
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
}