繁体   English   中英

使用 redux thunk 的动作创建者和普通的异步函数之间的区别

[英]Difference between an action creator using redux thunk and a normal async function

所以我想了解 Redux thunk 的基础知识之外,我制作了两个动作创建器,一个可以工作并使用 redux thunk,另一个只使用异步但中断。下面是截图:

截屏

因此,在两个动作创建者中,我都等待 API 请求完成,然后返回一个动作(具有类型和负载的 JS 对象)。

但是,只有顶部一个有效,底部一个给出错误,指出 action 必须是普通对象,尽管我返回了一个具有 2 个属性的普通对象。 我一直在努力理解为什么第二个动作创建者会刹车,如果有人能详细解释为什么会这样,那就太好了。谢谢!

这是因为,当您使用 thunk 时,您将返回一个对象或函数。 dispatch(fetchUser())情况下,当您调度类似dispatch(fetchUser()) ,它没有返回任何内容,因为您正在调用异步方法。 现在 await 下面的代码只有在 async all 完成后才会执行,原始调用dispatch(fetchUser())已经完成(提示:只有 await 下面的代码没有执行,但函数调用已经结束),以及fetchUser()没有返回任何对象,但在第一种情况下,您实际上正在返回一个调用异步方法的函数。 这就是 thunk 中间件的神奇之处。 它执行该函数并分派一个由 thunk 执行的动作(提示:您正在返回一个将分派作为参数的函数)。 希望这可以消除您的疑虑。 我建议您阅读 async/await 的真正工作原理(提示:事件循环/单线程)。

你不能使用异步函数,因为它总是会返回一个承诺。 即使你返回一个值,它也会被包装在一个承诺中并被返回。 如果在 async 函数中没有返回任何内容并尝试读取值,则 undefined 将被包装在一个 promise 中。 正如 redux 所说,动作创建者应该返回一个不能直接使用异步函数完成的普通对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM