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

Composable Architecture 1.0中替代fireAndForget执行无反馈代码的方法

在Composable Architecture 1.0中执行无反馈代码的推荐方式

TCA 1.0弃用Combine后,官方不再推荐Effect.fireAndForget,转而使用基于Swift Concurrency的Effect.run方法来执行不需要向Reducer反馈动作的代码。以下是具体的非异步和异步代码示例:

非异步代码示例

直接在run闭包中同步执行代码即可,闭包天然支持async上下文,同步逻辑无需额外处理:

Reducer { state, action, environment in
  switch action {
  case .performSyncTask:
    return .run { send in
      // 执行同步任务:比如打印日志、修改本地存储
      print("执行同步无反馈任务")
      UserDefaults.standard.set(true, forKey: "taskFinished")
      // 不需要反馈时,完全不用调用send()
    }
  // 其他action分支处理
  }
}

异步代码示例

如果要执行异步操作(比如网络请求、耗时IO),直接在run闭包中用await标记异步调用即可,无需额外的Combine包装:

Reducer { state, action, environment in
  switch action {
  case .performAsyncTask:
    return .run { send in
      do {
        // 调用环境中的异步方法
        try await environment.apiClient.submitData()
        print("异步任务完成,无反馈")
      } catch {
        // 仅处理错误日志,不向Reducer发送动作
        print("异步任务失败:\(error.localizedDescription)")
      }
      // 全程不调用send(),实现无反馈效果
    }
  // 其他action分支处理
  }
}

关键说明

  • Effect.run的闭包参数send用于向Reducer发送动作,不需要反馈时完全可以忽略它,这就等价于原来fireAndForget的作用。
  • 所有异步逻辑都遵循Swift Concurrency的规则,比如用await等待异步结果、用do/catch处理错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:06:00