等待异步动作创建者更新另一个动作创建者中的状态
Awaiting for an async action creator to update the state inside another action creator
我有一个 action creator 执行异步请求并更新状态(使用 react-redux 中间件):
export function requestA() {
return function (dispatch) {
dispatch(startRequest())
return Service.getA().then(
data => dispatch(receivedA(data)),
error => console.log("An error occurred.", error)
)
}
}
效果很好。
现在我想创建另一个动作创建器,它将使用 requestA()
动作创建器,并将调用另一个异步请求。
export function requestB() {
return function (dispatch, getState) {
dispatch(requestA()) // <--- How to await for this ???
let A_data = getState().A_data;
return Service.getB(A_data).then(
data => dispatch(receivedB(data)),
error => console.log("An error occurred.", error)
)
}
}
有没有办法让我等待 dispatch(requestA())
完成,然后再继续 运行 函数的其余部分?
在继续下一个请求之前,我需要更新状态。
备注
我知道我可以通过在我的动作创建者中调用 2 个请求来做到这一点,但我想知道我是否可以调用 dispatch(requestA())
来做到这一点,因为已经设置了逻辑。
您只需要等待调用函数完成使用await
async
关键字:
export function requestA() {
return async function (dispatch) {
dispatch(startRequest())
await Service.getA().then(
data => dispatch(receivedA(data)),
error => console.log("An error occurred.", error)
)
}
}
我有一个 action creator 执行异步请求并更新状态(使用 react-redux 中间件):
export function requestA() {
return function (dispatch) {
dispatch(startRequest())
return Service.getA().then(
data => dispatch(receivedA(data)),
error => console.log("An error occurred.", error)
)
}
}
效果很好。
现在我想创建另一个动作创建器,它将使用 requestA()
动作创建器,并将调用另一个异步请求。
export function requestB() {
return function (dispatch, getState) {
dispatch(requestA()) // <--- How to await for this ???
let A_data = getState().A_data;
return Service.getB(A_data).then(
data => dispatch(receivedB(data)),
error => console.log("An error occurred.", error)
)
}
}
有没有办法让我等待 dispatch(requestA())
完成,然后再继续 运行 函数的其余部分?
在继续下一个请求之前,我需要更新状态。
备注
我知道我可以通过在我的动作创建者中调用 2 个请求来做到这一点,但我想知道我是否可以调用 dispatch(requestA())
来做到这一点,因为已经设置了逻辑。
您只需要等待调用函数完成使用await
async
关键字:
export function requestA() {
return async function (dispatch) {
dispatch(startRequest())
await Service.getA().then(
data => dispatch(receivedA(data)),
error => console.log("An error occurred.", error)
)
}
}