Как мне сделать так, чтобы метод вызывался с задержкой?

Ребят, подскажите как решить проблему. Мне нужно чтобы этот метод вызывался только через 2 секунды, и вызовы не ставились в очередь после каждого нажатого раза на ручку которая дергает запрос. Пытался сделать через setTimeout, но все равно запросы ставятся в очередь. Т.е. нужно чтобы после того как была нажата кнопка прошло время и вывелся результат, и если человек еще раз нажмет кнопку то, только через 2 секунды был бы следующий вызов, но запросы не ставились бы в очередь, а был всего один. Надеюсь я более менее объяснил. Я читал, что можно сделать через debounce, но не понимаю как мне тогда построить логику..
Я пробую вот так, но получаю ошибку. Не пойму как именно это сделать..
error Move function declaration to function body root no-inner-declarations

Вот метод который нужно обернуть в debounce с задержкой 2 секунды.

async getStatisctics_actions({ commit }) {
            try {
                const url = '/recStructs'
                const options = {
                    params: {
                        currency: this.state.underlying, 
                        maturity: this.state.maturity, 
                        amount: this.state.amount, 
                        fut_hedge_flag: this.state.futHedgeFlag
                    }
                }
                const response = await axios.get(url, options)
                commit('setFullData_mutations', response.data.data) // Получаем все графики
            } catch (error) {
                return error
            }
        },


А вот что я пытался сделать и получил ошибку.


async getStatisctics_actions({ commit }) { // Получаем все графики
      try {

        const debounce = (fn, ms) => {
            let timeout;
            return function() {
                const fnCall = () => { fn.apply(this, arguments)}
                clearTimeout(timeout);
                timeout = setTimeout(fnCall, ms)
            };
        }

        async function chartDebounce() {
            const url = "/recStructs";
            const options = {
            params: {
                currency: this.state.underlying,
                maturity: this.state.maturity,
                amount: this.state.amount,
                fut_hedge_flag: this.state.futHedgeFlag,
            },
            };
            const response = await axios.get(url, options);
            commit("setFullData_mutations", response.data.data); 
        }

      }
       catch (error) {
        return error;
      }
    },
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы