在swift中执行请求的流程

问题描述 投票:0回答:2

我在存储库类中有三个函数。我首先按 createUser 的顺序调用该函数,然后调用submitApplication,最后调用submitMemorableWord function 。 条件是如果createUser函数执行成功则转到submitApplication函数,然后如果submitApplication函数执行成功则流程将转到submitMemorableWord函数。

我已将布尔标志设置到函数执行块中,如果布尔标志返回 true,则转到下一个代码执行并调用适当的函数。我调试了一下,发现只调用了 createUser 函数。

我在 execute 函数上将布尔标记(成功)设置为 true,然后我期望它应该转到提交函数并调用 submitApplication。我还在提交函数中设置了另一个布尔标记 submitComplete 并将值更改为 true当提交函数成功返回时,最后我检查布尔标签 submitComplete 是否返回 true ,这意味着提交函数代码执行成功,然后调用完整函数并返回完整函数的结果。

从不调用submit或submitApplication函数,这是下一个要调用的函数..

这是 Repository 类的代码....

import Foundation

class Repository {
 
    init() {}
    func createUser() async throws -> String {
        "User"
    }
 
    func submitApplication() async throws -> Bool {
        true
    }
 
    func submitMemorableWord() async throws -> Bool {
        true
    }
}

这是代码

import Foundation UseCase class 

class UseCase {
  
  let repository = Repository()
  var success: Bool = false
  var sumbitComplete: Bool = false
  
  func execute() async throws {
    do {
      success = true
      let createUser =  try await repository.createUser()
    } catch {
      success = false
      print("error " + error.localizedDescription)
    }
    
    func submit() async -> Bool {
      if success {
        do {
          let submit = try await repository.submitApplication()
          sumbitComplete = true
        } catch {
          return false
        }
      }
      return true
    }
  }
  func complete() async {
    if sumbitComplete {
      do {
        let completeRequest =  try await repository.submitMemorableWord()
      } catch {
        print("Sorry sometings went wrong..")
      }
    }
  }
}

这是视图控制器中的代码..

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
      Task { await FinalResult() }
    }


  func FinalResult() async {
    let usecase = SimpleUseCase()
    do {
      let result = try await usecase.execute()
    } catch {
      print(error.localizedDescription)
    }
  }
}
ios swift viewcontroller
2个回答
0
投票

您可以串行调用异步调用,因为它等待结果,因此它会串行执行。

func execute() async throws {
    do {
        let createUser =  try await repository.createUser()
        let submit = try await repository.submitApplication()
        let completeRequest =  try await repository.submitMemorableWord()
    } catch {
        print("error " + error.localizedDescription)
    }
}

您可以在 catch 块中处理任何请求中的错误。


0
投票

看起来让

execute
管理整个流程会更简单

func execute() async throws {
   let createUser =  try await repository.createUser()
   let submit = try await repository.submitApplication()
   let completeRequest =  try await repository.submitMemorableWord()
}
© www.soinside.com 2019 - 2024. All rights reserved.