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

网络请求中DataTask未执行问题排查:基于URLSession与AnyPublisher的RestManager实现异常

排查URLSession DataTask未执行的问题

从你的代码来看,最核心的问题是你创建了URLSession dataTask但没有调用resume()方法——这是网络任务启动的必要步骤,没调用的话任务根本不会被系统调度执行,自然不会进入你设置断点的分支逻辑,Future也永远不会发送任何结果,导致ViewModel只能拿到默认的空数组,也不会有错误抛出。

修复核心问题

只需要在创建dataTask的代码末尾加上.resume(),让任务启动:

class RestManager {
    func fetchData<T: Decodable>(url: URL) -> AnyPublisher<Result<T, ErrorType>, Never> {
        return Future<Result<T, ErrorType>, Never> { promise in
            URLSession
                .shared
                .dataTask(with: url) { data, response, error in
                    // 你的原有逻辑...
                }
                .resume() // 这里加上resume()!
        }
        .eraseToAnyPublisher()
    }
}

额外排查点(如果修复后仍有问题)

如果加上resume()后还是没进入分支,你可以检查以下几点:

  • URL有效性:确认传入的url是合法可访问的,比如在浏览器里打开这个URL看看是否能正常返回数据
  • 网络权限/ATS设置:如果是iOS平台,若使用HTTP协议(非HTTPS),需要在Info.plist中配置NSAppTransportSecurity的例外规则,否则系统会拦截请求
  • Combine订阅生命周期:在ViewModel中订阅这个Publisher时,要确保订阅对象(AnyCancellable)被正确持有,没有被提前释放——如果订阅被销毁,即使网络任务执行了,你也接收不到结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:09:05