ios - 如何在之前Api成功的基础上调用多个Api

标签 ios swift

我想在同一个屏幕上调用多个API,但是当一个API失败时,不应该调用其他API吗?下面的代码工作正常。但我需要的是,如何以更简单的方式重构它?

      ApplicationService.requestAppEndPointUrl { success, error in
        if success {
            ApplicationService.appLinkDownload { success, error in
                if success{
                    ApplicationService.requestApplicationSession { success, error in
                        if success {
                            ApplicationService.validateSdk { success, error in
                                if success {
                                    ApplicationService.requestApplicationDetails { success, error in
                                        if success{
                                            print("Success")
                                        }
                                        else{
                                            self.showErrorAlert(error)
                                        }
                                    }
                                }else{
                                    self.showErrorAlert(error)
                                }
                            }
                        }else{
                            self.showErrorAlert(error)
                        }
                    }
                }else{
                    self.showErrorAlert(error)
                }
            }
        }else{
            self.showErrorAlert(error)
        }
    }

最佳答案

如果 ApplicationService 是可以修改的类/结构,则可以将带有完成处理程序的同步函数调用转换为异步函数调用,使用Swift 5.5 concurrency 。代码如下所示:

do {
  try await ApplicationService.requestAppEndPointUrl()
  try await ApplicationService.appLinkDownload()
  try await ApplicationService.requestApplicationSession()
  try await ApplicationService.validateSdk()
  try await ApplicationService.requestApplicationDetails()
} catch {
  self.showErrorAlert(error)
}

然后,第一个错误将破坏调用链,将被咳嗽并显示。
如果您必须使用同步 ApplicationService 函数,您可以使用异步包装器将它们转换为异步函数,如上面引用的链接所示。

关于ios - 如何在之前Api成功的基础上调用多个Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70676635/

相关文章:

ios - 为什么我们仍然在 swift ios 应用程序中使用 NSDictionary 和 NSArrays?

swift - macOS Swift 3 - 处理通知警报操作按钮

ios - iAd ADBannerView 在设备上显示有色

xcode - 如果条件因表达式太复杂而失败

ios - 通过委托(delegate)发送数据

android - iOS 上的 Material 设计

ios - UIImageView 对齐

ios - 如何设置UICollectionViewCell大小

快速动画在 UIKeyboardWillShowNotification 事件中不起作用

ios - 禁用文本字段中的字母字符(我的部分代码不会执行)