7ba*_*all 3 asynchronous swift promisekit
我正在使用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(...)
}
}
Run Code Online (Sandbox Code Playgroud)
您可以返回Promise结果,而不是使用执行和拒绝。在下面,我创建了一个函数,向您展示如何实现:
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
}
Run Code Online (Sandbox Code Playgroud)
通过不使用完全填充和拒绝,您还可以清理代码并将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)
}
Run Code Online (Sandbox Code Playgroud)
您是否正在使用PromiseKit扩展基金会?它有助于简化Promises的联网呼叫。您可以在此处获取扩展名:https : //github.com/PromiseKit/Foundation
| 归档时间: |
|
| 查看次数: |
1612 次 |
| 最近记录: |