我在存储库类中有三个函数。我首先按 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)
}
}
}
您可以串行调用异步调用,因为它等待结果,因此它会串行执行。
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 块中处理任何请求中的错误。
看起来让
execute
管理整个流程会更简单
func execute() async throws {
let createUser = try await repository.createUser()
let submit = try await repository.submitApplication()
let completeRequest = try await repository.submitMemorableWord()
}