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

Swift异步函数顺序执行失效求助:Alamofire请求并行运行

解决async/await下Alamofire请求未按顺序执行的问题

你的核心问题是functionA和functionB虽然声明为async,但内部的Alamofire请求还是基于回调的异步逻辑,没有适配Swift的async/await机制。这导致函数会直接执行到末尾返回,不会等待Alamofire请求完成,所以await functionA()根本没等到请求结束就开始执行functionB(),看起来像是并行运行。

具体改造方案

1. 把Alamofire请求包装成支持async/await的形式

用withCheckedThrowingContinuation(处理错误)或withCheckedContinuation(忽略错误),将回调式的Alamofire请求转换为async函数,确保await能真正等待请求完成:

改造functionA:

func functionA() async throws {
    let responseData = try await withCheckedThrowingContinuation { continuation in
        AF.request("你的A接口地址")
            .responseDecodable(of: [A].self) { response in
                switch response.result {
                case .success(let data):
                    continuation.resume(returning: data)
                case .failure(let error):
                    continuation.resume(throwing: error)
                }
            }
    }
    a = responseData
}

同理改造functionB:

func functionB() async throws {
    let responseData = try await withCheckedThrowingContinuation { continuation in
        AF.request("你的B接口地址")
            .responseDecodable(of: [B].self) { response in
                switch response.result {
                case .success(let data):
                    continuation.resume(returning: data)
                case .failure(let error):
                    continuation.resume(throwing: error)
                }
            }
    }
    b = responseData
}

2. 处理请求错误(可选)

如果接口可能返回错误,在调用时用do-catch捕获异常:

func runAlgorithm() {
    Task {
        do {
            try await functionA()
            try await functionB()
            await functionC()
        } catch {
            // 这里处理错误,比如打印日志或提示用户
            print("请求失败:\(error.localizedDescription)")
        }
    }
}

3. 确保functionC使用最新状态

functionC在functionB完成后执行时,a和b已经是接口返回的最新值,可以直接用来生成cDict:

func functionC() async {
    // 基于a和b生成字典的逻辑示例
    cDict = zip(a, b).map { aItem, bItem in
        ["a_value": aItem, "b_value": bItem]
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:04:57