Можете ли вы отменить асинхронную функцию с помощью lodash debounce? - PullRequest
0 голосов
/ 28 ноября 2018
const asyncMethod = async () => {
    const data = await fetchData()
    return data.map(parseResponse)
})

const a = _.debounce(asyncMethod, 0, { leading: true })

Не могли бы вы позвонить a.cancel(), а также остановить асинхронный метод?

1 Ответ

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

Прямо из документации :

Создает отклоненную функцию, которая задерживает вызов func до истечения миллисекунд ожидания с момента последнего вызова этой функции.Отклоненная функция поставляется с методом cancel для отмены отложенных вызовов func и методом flush для немедленного их вызова.Предоставьте опции, чтобы указать, должен ли func вызываться на переднем и / или заднем фронте времени ожидания.Функция вызывается с последними аргументами, предоставленными для функции debounce.Последующие вызовы дебазированной функции возвращают результат последнего вызова функции.

const fn = () => console.log('foo')
const dFn = _.debounce(fn, 500)

dFn()
dFn.cancel()  // Remove this to see it working and leave it to cancel

Давайте попробуем с setTimeout:

const fn = () => setTimeout(function(){console.log('foo')}, 200)
const dFn = _.debounce(fn, 500)

dFn()
dFn.cancel()  // Remove this to see it working and leave it to cancel
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

Теперь, если асинхронная функция достигла точки выполнения, вы ничего не можете сделать на самом деле.

...