0
我有一個提交處理髮射了一個行動的創建者發出的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
。