我目前正在调查是否应该将 PromiseKit 集成到现有项目中。
我的主要问题是我需要实现一个可以调用多达 5 个 Web 服务的业务逻辑。其中一些被调用取决于先前的结果。
我当前的架构是基于将代码分解为多个函数,并使用相互调用的闭包。
我试图找出是否可以使用 PromiseKit(或其他任何东西)编写更易于管理的代码。
这是我需要做的一些伪代码:
// if true, the phone validation is skipped
let forceRequest = false
// true if a 3rd party web-service has checked the phone number
let isVerified = true
// true if the 3rd party checked the phone number and it is valid
var isValid = false
if !isVerified {
// update value from 3rd party web-service
isValid = isValidPhoneNumberPromise()
}
// If the phone no is invalid stop execution (unless forced)
if !isValid && !force {
throw MyError.error1
}
// web request to create order
createOrderPromise()
// if we have a valid phone number, first send an SMS, then update log
if isValid {
sendSmsPromise()
updateLogPromise()
}
根据 totiG 的回答,我提出了以下变体:
var isValid = isValid
firstly
{
return Controller.verify(isVerified: isVerified, isValid: isValid)
}
.then { _isValid -> Promise<Int> in
isValid = _isValid
return Controller.createOrder()
}
.then
{ _ -> Promise<Bool> in
if isValid {
return Controller.isSendSms()
}
return Promise (value: true)
}
.then
{ _ -> Promise<Bool> in
if isValid {
return Controller.updateLog()
}
return Promise (value: true)
}
.catch
{ error in
print (error)
}