Показать сообщение отдельно
  #1 (permalink)  
Старый 02.07.2016, 18:56
Аспирант
Отправить личное сообщение для innowed Посмотреть профиль Найти все сообщения от innowed
 
Регистрация: 27.03.2015
Сообщений: 78

декоратор для вызова функции n раз в секунду
Здравствуйте! Хочу решить такую задачку, мой код сейчас:
function callWrap(f, count){
  var now = Date.now();
  return function(){
      var calls=0;
      while(Date.now()-now < 1000 && calls<count){ //вызывать функцию не чаще чем count раз в секунду
        f.apply(this, arguments);
        calls++;
      }
  };  
}

//"медленная" функция
var arr = [];
for (var i = 0; i < 1000; i++) arr[i] = 0;
function walkLength(arr) {
  for (var i = 0; i < arr.length; i++) arr[i]++;
  console.log('done');
}

var test = callWrap(walkLength, 7000); //обёртываем функцию в декоратор
test(arr);


Но я не могу понять, правильно ли такое решение? Условия вроде как выполняются, чисто визуально проходит 1 секунда и если включить каких-нибудь приложений, то количество вызовов функции уменьшается. Может есть какое-нибудь более изящное решение? (но больше интересует конкретно это, т.к. я его писал по наитию)
Ответить с цитированием