首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PromiseKit履行和拒绝约定

PromiseKit履行和拒绝约定
EN

Stack Overflow用户
提问于 2017-11-22 08:25:20
回答 1查看 3.2K关注 0票数 4

我正在使用PromiseKit来处理我的网络呼叫。我正在试着看看是否有一个公约或一个更清洁的方式来尽早履行或拒绝承诺。如下图所示,有几个条件需要我尽早完成或拒绝。我目前正在做这件事,在之后放置一个return语句。我觉得这是相当笨重的,我想知道是否有更好的方法来做到这一点。谢谢!

代码语言:javascript
复制
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(...)
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-22 08:35:37

而不是使用满足和拒绝,你可以返回承诺的结果。下面我创建了一个函数,向您展示了如何做到这一点:

代码语言:javascript
复制
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检查移动到一个新函数,如:

代码语言:javascript
复制
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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47429902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档