我试图按照以下顺序将多个调度操作一个接一个地链接起来:
1.updateCart(dispatch,cartProducts,loggedUser(-带有redux-thunk。
完成数据提取后,im按顺序调度操作:
2.调度(logoutReset(((
3.调度(logoutSuccess(((
4.然后刷新-window.location.reload(((
但没有等到调度第一个完成后再继续,所以它总是一团糟。我尝试了很多方法,等待或承诺,但都没有成功。
我想向你们学习,如何做好这件事。
组件导航栏:
const handleLogout = async() => {
try{
await updateCart(dispatch,cartProducts ,loggedUser)
.then( ()=> dispatch(logoutReset()))
.then( ()=> dispatch(logoutSuccess()))
.then( ()=> window.location.reload());
}catch(err){
console.log(err)
}
};
操作(updateCart(redux thunk:
export const updateCart = async (dispatch, selectedProduct, loggedUser) => {
dispatch({ type: ActionTypes.UPDATE_CART });
try {
await userRequest.put(`carts/` + loggedUser.id, {
userId: loggedUser.id,
products: selectedProduct
})
} catch (error) {
console.log(error.response)
dispatch(returnErrors(error.response.data, error.response.status));
}
};
我找到了一个解决方案,如果有人需要的话。
如果你想在调度完成后做一些事情,只需输入useEffect和在调度后更新的参数,这样在调度和更新后你就可以做你需要做的事情。非常简单的方法
const handleAddClick = () => {
dispatch(addToCart({selectedProduct:item,quantity}))
}
所以在发货完成后,cartProducts会更新。
useEffect(() => {
updateCart(dispatch,cartProducts ,loggedUser)
}, [cartProducts])