Axe ios отмена токена, отмена каждого запроса - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь реализовать метод cancelToken API, чтобы всякий раз, когда я делаю запрос к серверу для получения результатов при каждом нажатии клавиши, должен обрабатываться только последний запрос, однако я реализовал API token ios cancel token и кажется, чтобы отменить каждый запрос, что я здесь делаю не так? Эта функция вызывается при каждом нажатии клавиши.

getProductLists2 = async () => {


        let formData = new FormData()

        const { start, limit } = this.state

        formData.append('start', start)
        formData.append('limit', limit)

        formData.append('product_title', this.state.searchTitle)
        formData.append('product_sku', this.state.searchSKU)

        let cancel;

        Axios({
            method: 'POST',
            url: BASE_URL + '/listProduct',
            // headers: { 'Content-Type': 'multipart/form-data' },
            data: formData,
            cancelToken: new Axios.CancelToken(c => cancel = c)
        })
            .then(products => {
                if (products && products.data.productList && products.data.productList.length > 0) {
                    this.setState({ productList: products.data.productList, totalProducts: products.data.productTotal })
                }
            })
            .catch(err => toast.error('Something went wrong'))
        console.log(cancel, 'h')
        cancel && cancel()
    }

1 Ответ

3 голосов
/ 07 апреля 2020

Вы должны отменить предыдущий cancelToken до того, как сделает новый вызов топором ios. Когда вы делаете первый запрос, сохраните cancelToken. Затем, когда вы делаете второй запрос, проверьте, есть ли уже cancelToken, и отмените его, а затем сделайте второй вызов ios.

Также было бы неплохо отменить ваш getProductLists2, чтобы ограничить скорость

Вот как я это делаю:

    // Cancel the previous axios token if any
    if (this.cancel) this.cancel.cancel();
    // Get a new token
    this.cancel = axios.CancelToken.source();
    axios
        .get(myURL, { cancelToken: this.cancel.token })
        .then((res) => {
          console.log(res.data);
        })
        .catch((error) => { console.log(error); });
...