繁体   English   中英

Redux Toolkit:在一个 thunk 中分派多个异步 thunk 操作时,生命周期操作类型不会同步

[英]Redux Toolkit: lifecycle action types doesn't sync up when dispatching multiple async thunk actions in one thunk

我有一个异步 thunk 操作来编排多个这样的异步 thunk

const someAction = createAsyncThunk(
  'my/someAction',
  async () => {...}
)
const someAction2 = createAsyncThunk(
  'my/someAction2',
  async () => {...}
)
const generatedThunk = createAsyncThunk(
  'my/thunk',
  async (arg, thunkApi) => {
    thunkApi.dispatch(someAction());
    thunkApi.dispatch(someAction2());
  }
)

我发现异步 thunk 之一,即someActionsomeAction被拒绝, my/thunk仍然会得到满足。 当任何一个my/thunk拒绝时,如何让my/thunk被拒绝?

createAsyncThunk始终捕获错误,以便我们避免在您的应用程序中出现“未捕获的承诺拒绝”消息。

您需要自己检查每一个的结果,并相应地返回一个被拒绝的承诺。

另外,请注意,按照当前编写的方式,您的代码将同时运行这两个 thunk。 没关系,只要确保它是您真正想要的 - 要串行运行它们,您需要await它们。

这里的一种选择是:

return Promise.all([
  thunkApi.dispatch(someAction()).then(unwrapResult),
  thunkApi.dispatch(someAction2()).then(unwrapResult)
]);

那将:

  • 并行运行这两个操作
  • 将每个动作的结果动作转换回已履行或拒绝的承诺
  • 如果这些请求中的任何一个被拒绝,则返回一个将拒绝的承诺

检查您的子操作结果并简单地在那里throw一个new Error ,您的主要操作会自动捕获它。 并且将以reject结束。

前任: 在此处输入图片说明

或者,如果您的类型配置正确,您可以破坏错误对象并像这样检查错误: if(error) throw Error('Some message!') ;

暂无
暂无

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

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