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

如何使用TCA Effect的.throttle实现带节流的搜索功能

用The Composable Architecture的Effect.throttle实现输入暂停后过滤集合

直接替换你现有方案的代码如下:

case .queryChanged(let newQuery):
  state.query = newQuery
  return .run { [items = state.items, query = newQuery] send in
    await send(.filterItems(items.filter(by: query)))
  }
  .throttle(
    id: CancelID.search,
    for: Constant.MY_DELAY,
    scheduler: DispatchQueue.main,
    latest: true
  )

关键说明

  • 用.throttle替代Task.sleep+cancellable的组合,更贴合TCA的Effect调度逻辑
  • id: CancelID.search:和你原来的取消ID保持一致,确保重复触发输入变更时,自动取消之前未执行的过滤请求
  • for: Constant.MY_DELAY:设置输入暂停后等待的时长,和你原来的延迟值对应
  • scheduler: DispatchQueue.main:指定过滤完成后发送动作的调度队列,因为涉及UI更新,主队列是常规选择
  • latest: true:只保留最新的过滤请求,完全符合「输入暂停后执行最新过滤」的需求,中间的输入变更会被自动忽略

方案优势

原来的Task.sleep方案是每次输入都启动一个延迟任务,再通过cancellable取消旧任务,而.throttle是TCA内置的操作符,专门处理这类「节流」场景,逻辑更简洁,也更符合框架的设计理念,不需要手动管理Task的生命周期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:57:09