Прекратить отправку запроса, если получили те же данные - PullRequest
0 голосов
/ 23 ноября 2018

Я работаю над бесконечной прокруткой для отображения данных с угловым компонентом.Идея состоит в том, что когда я получил событие прокрутки, я буду просить иметь больше данных, изменив значение limit при вызове API.

Я перестану вызывать API, если data.length < limit && data.length === currentData.length, но потому что всеасинхронный, чтобы этот компонент вызывал как минимум 10 раз один и тот же запрос на увеличение лимита для получения тех же данных.Логика остановки вызова находится внутри обработчика subscribe.

Я думаю, мне нужно перехватить событие scroll end не только scroll, но это событие не существует, есть ли другой подход к этой проблеме?

Ответы [ 2 ]

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

Если я правильно понимаю, проблема, которую вы испытываете, вызвана событием прокрутки, вызванным браузером несколько раз.то, что вы можете сделать, чтобы избежать этих больших накладных расходов, это реализовать простой механизм отладки, чтобы избежать вызова одного и того же API несколько раз в течение определенного интервала.

что-то вроде:

function debounce(fn, debounceTime = 500) {
  let timeout = -1;
  const currentScope = this;
  return function (...args) {
    clearTimeout(timeout);
    timeout = setTimeout(fn.bind(currentScope, ...args), debounceTime);
  }
}

, а затем вызватьВаша loadData функция

const softLoadData = debounce(loadData);

в этот момент ваша новая функция softLoadData не будет вызываться более одного раза в интервале 500 мс (который вы можете выбрать) в соответствии с вашими потребностями.

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

Я думаю, что вы должны пометить некоторые логические значения как «ожидающие данные» - и до тех пор, пока данные не будут полностью загружены и соответственно обновлены обновленные данные, событие прокрутки ничего не изменит.

...