Javascript Redux工具包:生命周期操作类型不';在一次thunk中调度多个异步thunk操作时,无法同步
我有一个异步thunk操作来编排多个异步thunk,如下所示Javascript Redux工具包:生命周期操作类型不';在一次thunk中调度多个异步thunk操作时,无法同步,javascript,reactjs,typescript,redux,redux-toolkit,Javascript,Reactjs,Typescript,Redux,Redux Toolkit,我有一个异步thunk操作来编排多个异步thunk,如下所示 const someAction = createAsyncThunk( 'my/someAction', async () => {...} ) const someAction2 = createAsyncThunk( 'my/someAction2', async () => {...} ) const generatedThunk = createAsyncThunk( 'my/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,即
someAction
和someAction
中的任何一个被拒绝,my/thunk
仍然可以实现。当任何一个thunk拒绝时,我如何使我的/thunk被拒绝?createAsynchThunk
始终捕获错误,以避免您的应用程序中出现“未捕获的承诺拒绝”消息
您需要自己检查每一项的结果,并相应地返回被拒绝的承诺
另外,请注意,在当前编写的代码中,这两个thunk将并行运行。这很好,只要确保它是您真正想要的-要以串行方式运行它们,您需要等待它们
这里的一个选择是:
returnpromise.all([
thunkApi.dispatch(someAction())。然后(unwrapResult),
dispatch(someAction2()).then(unwrapResult)
]);
这将:
- 并行运行这两个操作
- 将每个操作的结果操作转换回已实现或已拒绝的承诺
- 返回一个承诺,如果其中一个请求被拒绝,该承诺将被拒绝
抛出一个新错误
在那里,您的主操作将自动捕获该错误。并将在拒绝
中结束
例:
或者,如果您的类型配置正确,您可以销毁错误对象并对错误进行如下检查:
if(error)抛出错误('Some message!')
嗨,谢谢你的回复!实际上someAction
和someAction2
不是并行的,someAction2
只有在someAction
过程中发生某个错误时才会执行,我大大简化了代码,使它们看起来是并行的。如果我们在这里只看其中一个,就像我问的那样,我想要'my/thunk'
拒绝当'my/someAction'或my/someAction2'拒绝时,我需要返回一个拒绝的承诺。我想知道您是否可以在您的答案中添加一个代码片段来告诉我如何做到这一点?谢谢顺便说一句,正如您所说,如果我必须以串行方式运行这些操作,我需要等待
。我想知道是否还有其他方法使用Promise
上的静态方法,比如Promise.all
(我知道Promise.all在这种情况下不起作用)子操作返回一个承诺,当承诺解决时,子操作将履行
,当承诺拒绝时,操作将拒绝
您需要使用等待
,或者您的主操作不等待其子操作,而是在子操作履行或拒绝之前返回。我尝试等待
子操作但是当子操作被拒绝时,主操作仍然没有得到被拒绝的
。我的子操作实际上就是这样的export-const-action=createAsyncThunk(“action”,async()=>{return-Promise.reject(“reject”);}
。但是unwrapResult
确实解决了这个问题