Redux thunk - 嵌套调度的函数/动作

Posted

技术标签:

【中文标题】Redux thunk - 嵌套调度的函数/动作【英文标题】:Redux thunk - Nesting dispatched functions / actions 【发布时间】:2020-03-06 16:24:55 【问题描述】:

我正在使用 redux-thunk 在我的 react 应用程序中执行异步操作,如下所示:

export const fetchImages = (objects) => dispatch => 
   const promises = objects.map(obj => axios
       .get(`$API_URL/files/$obj.img ? vendor.img : 'default.png'`, responseType: 'arraybuffer')
       .then( res => obj.imgData = 'data:;base64,' + convertArrayBufferToBase64(res.data))
   );
   return Promise.all(promises).then (() => Promise.resolve(objects));

当我在我的任何组件中使用它时,它完全可以正常工作。但是,如果我在另一个动作中使用它,像这样:

export const fetchAllObjects = () => dispatch => axios.get(`$API_URL/objects?limit=50`)
   .then(res => fetchImages(res.data.docs).then(objects => 
       dispatch(
           type: FETCH_ALL_OBJECTS,
           payload: objects
       );
   ));

它失败了。我希望它返回一个承诺,但是它返回“dispatch => ...”,因此then() 在返回值上失败。

【问题讨论】:

【参考方案1】:

我刚刚注意到fetchImages是一个返回函数的函数:

export const fetchAllObjects = () => dispatch => axios.get(`$API_URL/objects?limit=50`)
   .then(res => fetchImages(res.data.docs)(dispatch).then(objects => 
       dispatch(
           type: FETCH_ALL_OBJECTS,
           payload: objects
       );
   ));

【讨论】:

这不是我的意思。我确实想把它放在商店里,fetchAllObjects 方法通常在做它应该做的事情。我只想在我的 fetchAllObjects 操作中使用另一个异步操作 (fetchImages),但这不起作用 @phoebus 修复刚刚完成 fetchImages 的调用

以上是关于Redux thunk - 嵌套调度的函数/动作的主要内容,如果未能解决你的问题,请参考以下文章

redux thunk - 承诺完成后如何在嵌套数组中调度数据

在redux和redux thunk中使用异步调度传递参数

Redux-thunk 调度一个动作并等待重新渲染

Redux thunk - 错误 · 动作必须是普通对象。使用自定义中间件进行异步操作,即使调度具有键类型的对象

javascript 动作创作者。他们将使用thunk进行redux调度

调度 thunk 动作创建者在 TypeScript 中不匹配