You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift异步请求执行流程异常:仅createUser函数被调用

Swift异步函数顺序调用问题排查与修复

问题原因分析

  • 嵌套函数未执行:在execute()方法中,你仅定义了嵌套的submit()函数,但从未调用它,导致submitApplication()根本没机会执行。
  • 后续方法未触发:complete()方法从未被调用,ViewController里只调用了execute(),没有触发submitMemorableWord()的执行。
  • 标志位控制逻辑无效:依赖success、submitComplete这类全局变量控制异步流程的方式不合理,即使变量更新,也没有对应的逻辑触发后续异步任务,而且异步环境下全局变量容易引发竞态问题。
  • 类名不匹配:ViewController中实例化的是SimpleUseCase,但你定义的类是UseCase,这会导致编译错误(如未额外定义SimpleUseCase)。

正确实现方式

利用Swift的async/await特性,直接按顺序等待每个异步函数完成,无需额外标志位,天然保证顺序执行:

修复后的UseCase类

import Foundation

class UseCase {
    let repository = Repository()
    
    func execute() async throws {
        // 1. 先执行createUser,成功后再继续
        let createUser = try await repository.createUser()
        print("创建用户成功: \(createUser)")
        
        // 2. createUser成功后,执行submitApplication
        let submitSuccess = try await repository.submitApplication()
        guard submitSuccess else {
            throw NSError(domain: "UseCaseError", code: 1, userInfo: [NSLocalizedDescriptionKey: "提交申请失败"])
        }
        print("提交申请成功")
        
        // 3. submitApplication成功后,执行submitMemorableWord
        let memorableWordSuccess = try await repository.submitMemorableWord()
        guard memorableWordSuccess else {
            throw NSError(domain: "UseCaseError", code: 2, userInfo: [NSLocalizedDescriptionKey: "提交记忆词失败"])
        }
        print("提交记忆词成功")
    }
}

修复后的ViewController类

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        Task { await finalResult() }
    }

    func finalResult() async {
        let useCase = UseCase()
        do {
            try await useCase.execute()
            print("所有流程执行完成")
        } catch {
            print(error.localizedDescription)
        }
    }
}

说明

  • 利用async/await的顺序性,每个try await都会等待前一个异步任务完成后才执行下一行代码,天然保证顺序。
  • 去掉不必要的全局标志位,改用guard语句检查每个步骤的结果,失败时直接抛出错误,逻辑更清晰。
  • 修正了命名规范问题(函数名小驼峰、类名匹配),符合Swift编码规范。

内容的提问来源于stack exchange,提问作者user21413551

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:59:54