gazes12
@gazes12

Как решить проблему?

Здравствуйте.
/* Добавление комментария */
const resultLine = $('.communication__result');
const createForm = $('.create-recall');

createForm.submit(() => {
    let nameValue = e.target.name.value;
    let surnameValue = e.target.surname.value;
    let recallValue = e.target.recall.value;

    startThrottle(/*Как передать сюда аргументы и получить их в addCommentFn?*/);
});


function addCommentFn(reset_timeComment){
}

const throttle = (func, ms) =>{
    return function(){
        let lg_tcl = localStorage.getItem('time_comment-last');
        let difference_time = $.now() - lg_tcl;

        if(difference_time >= ms){
            let timer;

            func.apply(this, [() => {
                clearInterval(timer);
                localStorage.setItem('time_comment-last', 0);
                recalls__columnReminder.removeClass('visible');
            }]);

            localStorage.setItem('time_comment-last', $.now());

            let count = ms / 1000;
            recalls__columnReminder.addClass('visible');
            timer = setInterval(() =>{
                count--;
                recalls__reminder.text(count);

                if(count < 1){
                    clearInterval(timer);
                    recalls__columnReminder.removeClass('visible');
                }
            }, 1000);
        }
    }
}

const startThrottle = throttle(addCommentFn, 5000);


Буду рад за помощь <3
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
передать сюда аргументы
Это вы уже умеете, тут ничего сложого. Вызов функции с аргументами - это азбука программирования.

получить их в addCommentFn
Вы уже передаёте туда один аргумент reset_timeComment.

Осталось только совместить эти два кусочка пазла.
Когда вы вызываете функцию startThrottle, вы вызываете функцию, которую вернула функция throttle. А тело этой функции контролируете тоже вы. Значит, вам ничто не мешает сделать, например, вот так:
const throttle = (func, ms) =>{
    return function(additionalArgs){
        ...
            func.apply(this, [() => {
                clearInterval(timer);
                localStorage.setItem('time_comment-last', 0);
                recalls__columnReminder.removeClass('visible');
            }, additionalArgs]);
        ...
}

function addCommentFn(reset_timeComment, additionalArgs) {
    console.log(additionalArgs.arg1);
}

startThrottle({arg1: 42, arg2: 'foo'});


Это самый простой и "некрасивый вариант", когда все аргументы оборачиваются в объект-пакет.
В современном javascript это вполне можно записать так:
const throttle = (func, ms) =>{
    return function(...additionalArgs){
        ...
            func.apply(this, [
                () => {
                    clearInterval(timer);
                    localStorage.setItem('time_comment-last', 0);
                    recalls__columnReminder.removeClass('visible');
                },
                ...additionalArgs
            ]);
        ...
}

function addCommentFn(reset_timeComment, arg1, arg2) {
    console.log(arg2);
}

startThrottle(42, 'foo'});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы