在thunk'd异步请求阻挡
问题描述:
我有一个提交处理发射了一个行动的创建者发出的reactjs异步请求:在thunk'd异步请求阻挡
handleTimeSubmit =() => {
// ...
this.props.emitTimeRequest(arg1, guid);
// setInterval should go here after checking response
}
行动的创建者应该接受202和投票点,并执行:
export function emitTimeRequest(arg1, guid) {
const URI = '/someplace';
var config = {
headers: {'X-Request-ID': guid}
};
return function (dispatch) {
axios.post(URI, arg1, config)
.then((response) => {
if (response.status === 202) {
var timeID = setInterval(() => {
dispatch(emitCheckTimeStatus(response.headers['content-location']));
}, 1000);
return {
type: EMIT_TIME_SLICE_REQ_OK,
payload: timeID
}
} else {
dispatch(emitTxRxAlert("red", "server timeslice error " + response.status));
return {
type: EMIT_TIME_SLICE_REQ_NA,
payload: response.status
}
}
})
};
}
然而setInterval
不会在行动的创建者属于(和我得到很多的警告在控制台)。如果我把它放在提交处理程序中,动作创建器函数在从服务器接收到响应之前将控制权返回给调用者,并且我不想在提交处理程序中放置一些kludgy计时器以强制它等待。种族条件。
有什么办法强制行动创造者(emitTimeRequest
以上)阻塞,直到它收到202? setInterval
应该在哪里实施?
一切工作正常,emitCheckTimeStatus
这是它的工作,并清除timeID
。
答
将相关组件的所有定时器逻辑移至componentWillMount()
。可以了,好了。