Почему не изменяется переменная?

Всем привет. Есть код, который блокирует выполнения действия, если не прошло 3сек.

Таймер так сказать.
var socketEmitLastCallTime = 0;
	var aqwsde = Date.now() - socketEmitLastCallTime ;
	if(aqwsde >= 3 * 1000) {
		socket.emit( 'message', { name: nameVal, message: msg, canal: canalVal } )
	    socketEmitLastCallTime = Date.now();
   };
   alert(aqwsde);

Проблема в чем:
Вывожу переменную alert`ом aqwsde, а она выводит текущее время. Т.е. эта переменная socketEmitLastCallTime не сохраняется. Почему?
  • Вопрос задан
  • 2709 просмотров
Решения вопроса 3
iiil
@iiil
Инженер и вэб-дизайнер, рисую.
В связи с уточнениями:
Вот у Вас функция, например при клике на кнопку:
jsfiddle.net/iiil/FnbJn
Вы каждый раз обнуляете переменную socketEmitLastCallTime
Соответственно функция по клику срабатывает каждый раз.
А вот тут пример jsfiddle.net/iiil/56n9s/1
Мы присваиваем ноль только при объявлении, а при клике не обнуляем. Соответственно, алерт вызывается только раз в 3 секунды.
Ответ написан
iiil
@iiil
Инженер и вэб-дизайнер, рисую.
$('span.alert').html('Нельзя отправлять сообщения чаще, чем раз в 2 секунды');
setTimeout(function(){
    $('span.alert').html('');
},1000);
Ответ написан
iiil
@iiil
Инженер и вэб-дизайнер, рисую.
Почему не продолжаете в том вопросе, где Вам подсказали это решение?
Что это у Вас такое: alert(var socketEmitLastCallTime = 0;
Откройте консоль и исправьте сначала все ошибки. А лучше приложите как минимум ссылку на тот вопрос.

var socketEmitLastCallTime = 0;
    setInterval(function(){
        aqwsde = Date.now() - socketEmitLastCallTime;
        if (aqwsde >= 3000) {
            console.log(aqwsde);
            socketEmitLastCallTime = Date.now();
        }
    },100);

Вот, вставьте в консоль, убедитесь, все работает. Интервал настроен через 100 млс, однако в консоль пишется только интервалы в 3000 (чуть более), т.е. 3 секундные интервалы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
pomeo
@pomeo
Ну в смысле, у вас же
var socketEmitLastCallTime = 0;
var aqwsde = Date.now() - socketEmitLastCallTime;
alert(aqwsde);

вы и получаете текущее время. Никакого таймера я здесь не вижу.
Ответ написан
Ваш ответ на вопрос

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

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