[Вопрос]: некорректная задача по debounce
Sm1t opened this issue · 4 comments
Описание
Задача https://learn.javascript.ru/task/debounce
Кажется стоит обновить задачу в соответствии с английской версией, так как сейчас в русской версии описание и решение debounce не верные.
Формулировка в русской версии: "Результатом декоратора debounce(f, ms) должна быть обёртка, которая передаёт вызов f не более одного раза в ms миллисекунд." - кажется не совсем про debounce, больше похоже на throttle.
Формулировка в английской версии (https://javascript.info/task/debounce):
suspends calls to f until there’s ms milliseconds of inactivity (no calls, “cooldown period”), then invokes f once with the latest arguments - приостанавливает вызовы f до тех пор, пока не пройдет ms миллисекунд бездействия (нет вызовов, «период восстановления»), затем вызывает f один раз с последними аргументами
Решение задачи, которое проходит тесты в английской версии, не проходит в русской, так как в русской версии повторные вызовы не отменяют предыдущие.
Если мои доводы верны, могу создать ПР
Добрый день.
Да, вы правы, материал устарел — PR был бы очень кстати. Ещё я бы предложил вам обновить описание и решение задачи «Тормозящий (throttling) декоратор» из этой же статьи, т.к она тоже немного отличается от оригинала.
Если видите, что в русской версии уже переведена какая-либо фраза или предложение, и она совпадает с оригиналом, — оставьте её, заново переводить не нужно.
Вся необходимая информация по редактированию находится здесь.
@Alexandre887 пока занимался обновлением, заметил что комментарии к тестам в английской версии, возможно, не совсем корректные, вот тут:
https://github.com/javascript-tutorial/en.javascript.info/blob/master/1-js/06-advanced-functions/09-call-apply-decorators/03-debounce/_js.view/test.js#L25-L26
setTimeout(() => debounced('b'), 200); // ignored (too early)
setTimeout(() => debounced('c'), 500); // runs (1000 ms passed)Если я правильно понял, то комментарии должны быть примерно следующими:
setTimeout(() => debounced('b'), 200); // ignored (there is next call less than 1000 milliseconds)
setTimeout(() => debounced('c'), 500); // runs (last call)Также заметил что в en версии задачи throttle в описании примера говориться про задержку 100мс, но в самом примере используется задержка 1000мс
https://github.com/javascript-tutorial/en.javascript.info/blob/master/1-js/06-advanced-functions/09-call-apply-decorators/04-throttle/task.md?plain=1#L24-L51
пока занимался обновлением, заметил что комментарии к тестам в английской версии, возможно, не совсем корректные, вот тут:
В целом непонятно, для чего в файле с тестами присутствуют пояснения. Я бы предложил не указывать их.
Также заметил что в en версии задачи throttle в описании примера говориться про задержку 100мс, но в самом примере используется задержка 1000мс
Да, по всей видимости, это опечатка. Отправьте PR в репозиторий английской версии учебника, если не затруднит. Можно исправить код, выставив везде 100мс, либо же исправить описание, указав везде 1000мс — на ваше усмотрение.
@Alexandre887 комменты удалил, опечатку поправил, ПР создал