2017-05-31 28 views
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

回答

0

將相關組件的所有定時器邏輯移至componentWillMount()。可以了,好了。