我正在使用PromiseKit来处理我的网络呼叫。我正在试着看看是否有一个公约或一个更清洁的方式来尽早履行或拒绝承诺。如下图所示,有几个条件需要我尽早完成或拒绝。我目前正在做这件事,在之后放置一个return语句。我觉得这是相当笨重的,我想知道是否有更好的方法来做到这一点。谢谢!
return PromiseKit { fulfill, reject in
if statusCode == 200 {
if conditionA {
if conditionB {
fulfill(...) // How do I stop the execution chain from here
return
} else {
reject(...) // Or here, without having to call return every time
return
}
}
reject(...)
}
}发布于 2017-11-22 08:35:37
而不是使用满足和拒绝,你可以返回承诺的结果。下面我创建了一个函数,向您展示了如何做到这一点:
func someMethod(statusCode: Int, conditionA: Bool, conditionB: Bool) -> Promise<Any> {
if statusCode == 200 {
if conditionA {
if conditionB {
return Promise(value: "Return value")
} else {
return Promise(error: PromiseErrors.conditionBInvalid)
}
}
}
return Promise(error: PromiseErrors.invalidStatusCode)
}
enum PromiseErrors: Error {
case invalidStatusCode
case conditionBInvalid
}通过不使用完全填充和拒绝,您还可以清理代码并将conditionB检查移动到一个新函数,如:
func someMethod(statusCode: Int, conditionA: Bool, conditionB: Bool) -> Promise<Any> {
if statusCode == 200 {
if conditionA {
return conditionASuccess(conditionB: conditionB)
}
}
return Promise(error: PromiseErrors.invalidStatusCode)
}
func conditionASuccess(conditionB: Bool) -> Promise<Any> {
if conditionB {
return Promise(value: "Return value")
}
return Promise(error: PromiseErrors.conditionBInvalid)
}您正在为基金会使用PromiseKit扩展吗?它有助于简化与承诺的网络通话。您可以在这里获得分机:https://github.com/PromiseKit/Foundation
https://stackoverflow.com/questions/47429902
复制相似问题