swift - PromiseKit 履行和拒绝约定

标签 swift asynchronous promisekit

我正在使用 PromiseKit 来处理我的网络调用。我正在尝试查看是否有约定或更简洁的方法来尽早履行或拒绝 promise 。如下图所示,有一些条件需要我提前满足或拒绝。我目前通过在之后放置一个 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(...)
  }
}

最佳答案

您可以返回 Promise 结果,而不是使用 fulfill 和 reject。下面我创建了一个函数,向您展示如何完成:

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
}

通过不使用 fullfill 和 reject,您还可以清理代码并将 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)
}

您是否在使用 Foundation 的 PromiseKit 扩展?它有助于通过 Promises 简化网络调用。您可以在此处获取扩展名:https://github.com/PromiseKit/Foundation

关于swift - PromiseKit 履行和拒绝约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47429902/

相关文章:

swift - Swift 4 中具有不同类型的递归泛型结构

asynchronous - 是否有 Service Worker 启动 waitUntil 来延迟处理获取?

javascript - Promise + async.js

python - Pykafka - 异步发送消息和接收确认

ios - Swift 以编程方式设置 View 约束错误日志

ios - 检索解析图像出现故障 Swift

ios - PromiseKit 6.0 将捕捉到的错误传递给调用者

ios - 返回使用 PromiseKit 的另一个 promise 的 promise

ios - 调整 collectionView.scrollToItem 考虑 inset?

ios - 为什么无法编译递归 PromiseKit 函数?