2017-05-31 33 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()。可以了,好了。