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

React Native redux-saga:yield all中能否执行多个put action

redux-saga中yield all是否支持同时执行多个put action

问题背景

目前我编写了一段接口请求逻辑:发起API调用后,根据返回结果分为两类分支处理:

  • OK(请求成功)
  • Error(请求失败)

由于存在间歇性网络连接问题,我需要为已触发的事件创建独立的待处理记录做本地存储,供后续流程使用。现有代码实现如下:

const response = yield call(api.login, credentials)

yield all(
            response.matchWith({
                Ok: ({ value }) => {
                    
                    put(Actions.pendingRecord(null))
                    return put(Actions.apiSuccess(value))
                },
                Error: ({ value }) => {
                    
                    const pendingRecord = {
                        value: true,
                        data: {
                            event: "queue"
                            
                        }
                    }
    
                    put(Actions.pendingRecord(pendingRecord))
                    return put(Actions.apiFailure(value))

                }
            })
        )

核心疑问:调用yield all时,是否支持同时执行多个put action?疑问对应的写法示例如下:

put(Actions.pendingRecord(null))
return put(Actions.apiSuccess(value))

解答

你当前的写法是无效的,put本质是创建一个普通的effect描述对象,只有把这个对象返回给saga执行器(也就是yield或者return给saga调用链)才会被实际执行。你现在写的第一行put(Actions.pendingRecord(null))只是创建了对象但没有传递给执行器,等于无效代码,不会触发任何action。

yield all本身完全支持并行执行多个put action,只要你把需要执行的多个put effect以数组形式传入即可。结合你当前的代码结构,只需要在每个分支里返回多个put组成的数组,all就会自动并行调度所有effect,修改后的正确代码如下:

const response = yield call(api.login, credentials)

yield all(
  response.matchWith({
    Ok: ({ value }) => {
      return [
        put(Actions.pendingRecord(null)),
        put(Actions.apiSuccess(value))
      ]
    },
    Error: ({ value }) => {
      const pendingRecord = {
        value: true,
        data: {
          event: "queue"
        }
      }
      return [
        put(Actions.pendingRecord(pendingRecord)),
        put(Actions.apiFailure(value))
      ]
    }
  })
)

这种写法下两个put会被同时触发执行,没有先后阻塞,完全满足你同时更新待处理记录、派发接口结果action的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:24:30