【发布时间】:2019-09-22 10:20:08
【问题描述】:
我有一个在单击按钮时执行的主 thunk。在这个 thunk 中,我想调用另一个 thunk 并等待它完成,然后再继续前进。第二个 thunk 执行带有嵌套承诺的承诺。但是,我无法弄清楚如何等待第二个 thunk 完成其异步操作。
我尝试在我的 thunk 上使用 return 关键字来使调用同步。我不能使用 async 关键字,因为我需要它在 IE 11 中工作。
我还尝试让我的第二个 thunk 返回一个承诺,然后执行类似 dispatch(secondThunk()).then(...) 的操作,但它说我的 thunk 实际上并没有返回一个承诺。
这是我的一些代码:
export function mainThunk(): ThunkAction<void, void, void, AnyAction> {
return (dispatch: Dispatch<any>) => {
...do some stuff
dispatch(secondThunk());
...do other stuff
};
}
export function secondThunk(): ThunkAction<void, void, void, AnyAction> {
return (dispatch: Dispatch<any>) => {
return new Promise((resolve: any, reject: any) => {
someAsyncFunction()
.then((response) => {
return Promise.all(someArray.map(someId => {
return someOtherAsyncFunction(someId):
}));
})
.then((responses) => {
response.foreach(response => {
dispatch(someReduxAction(response.someField));
});
})
.then(() => {
resolve();
});
});
};
}
当我运行我的代码时,mainThunk 不会在执行之前等待 secondThunk 完成。你能帮我弄清楚如何完成这项工作吗?
【问题讨论】:
标签: javascript typescript promise redux-thunk