как отменить аксиозный вызов через определенное время - PullRequest
0 голосов
/ 20 ноября 2018

Я использую React, Redux, Axios и Thunk. В случае с избыточным действием приложение выполняет GET-вызов для получения данных, но мне нужно отменить его или попросить пользователей посмотреть, хотят ли они отменить его, скажем, через 10 секунд. Я читал об отмене Аксиоса, но не знаю, как использовать его в зависимости от времени.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018
//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 () funtion.

Может быть, это вам поможет!

0 голосов
/ 20 ноября 2018

Через документацию от 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)
...