在特定时间后如何取消axios呼叫

时间:2018-11-19 21:59:03

标签: reactjs redux redux-thunk

我正在使用React,Redux,Axios和Thunk。在一次Redux操作中,该应用程序进行了GET调用以接收数据,但是我需要取消它,或者要求用户查看是否要在10秒后取消它。我读过有关Axios取消的信息,但不知道如何及时地使用它。

2 个答案:

答案 0 :(得分:0)

通过Axios的文档,我们可以合并setTimeout来检查我们要取消的承诺状态

编辑:看来没有标准来检查诺言是否已解决,因此您可以执行以下操作:

在这里我们可以检查诺言是否已定义

const CancelToken = axios.CancelToken;
const source = CancelToken.source();

axios.get('/user/12345', {
  cancelToken: source.token
}).catch(function (thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // handle error
  }
});

const callPromise = axios.post('/user/12345', {
  name: 'new name'
}, {
  cancelToken: source.token
})

// cancel the request by checking the promise
setTimeout(() => {
    if(!callPromise){
        source.cancel('Operation canceled by the user.');
    }
}, 10000)

我们还可以设置一个外部变量,该变量将在解决诺言后设置

const CancelToken = axios.CancelToken;
const source = CancelToken.source();

let isResolved = false;

axios.post('/user/12345', {
    name: 'new name'
}, {
    cancelToken: source.token
}).then(res => {
    isResolved = true;
})

// cancel the request by checking the promise
setTimeout(() => {
    if(!isResolved){
        source.cancel('Operation canceled by the user.');
    }
}, 10000)

答案 1 :(得分:0)

//this statement your axious get

    state = {data: [] };
            componentWillMount(){
                axios.get('https://yourwebsite.com')
                .then(Response => this.setState({ data: Response.data}));
            }

//this statement for your setTimeout() function

    setTimeout(() => {
        if(callPromise.isResolved()){
            data.cancel('Canceled');
        }
    }, 15000)

然后您需要 data.setTimeout()功能。

也许会对您有帮助!