2015-04-13 3 views
0

У меня есть сервер, работающий со следующим кодом. Я хочу, чтобы функция callAPI вызывалась каждые две секунды, прощая часы между 2:00 утра 5:18 утра. API сообщает, что я делаю более 37,260 вызовов API в день (0,5 звонка/секунду * 60 секунд/минута * 60 минут/час * (24-3,3) часа). Любая причина, по которой эта функция будет запускать функцию callAPI чаще, чем 37 260 раз в день?Выполнять функцию каждые 2 секунды

function callAPI(callback) { 
    // Do API call 
    callback() 
} 

function timer() { 
    var d = new Date(); 
    var hour = d.getHours(); 
    if (hour == 2) { 
    setTimeout(function() { 
     callAPI(timer); 
    }, 1000 * 60 * 60 * 3.3); // Set timeout to 3.3 hours (resumes at 5:18) 
    } else { 
    setTimeout(function() { 
     callAPI(timer); 
    }, 2000); // 2 seconds 
    } 
} 

callAPI(timer) 
+0

Как он был запущен - может ли он быть отправлен несколько раз? – SmokeyPHP

+1

Сколько API говорит, что вы используете? Вы должны использовать setInterval здесь вместо setTimeout. –

+0

Сколько экземпляров вашего узла вы используете? вы должны убедиться, что вы используете только один экземпляр. Кроме того, я бы записывал каждый запрос в файл, используя библиотеку, например, winston https://github.com/winstonjs/winston, чтобы быть уверенным, почему и когда это происходит. – Charbz

ответ

1

Функция getHours возвращает число между 0 и 23.

Таким образом, вы можете получать 12 * 60 * 30 дополнительных вызовов на второй ветви в своем заявлении, если за день.

+0

Вы на самом деле правы, это проблема. –

+0

Не могли бы вы подробнее объяснить? Кажется, getHours всегда будет возвращать 2 в какой-то момент каждый день и соответственно таймаутом на 3,3 часа. – user3751185

+0

Вы правы, он вернет 2 раз в день, в 3 часа ночи. В настоящее время ваши ожидания в отношении кода, похоже, предполагают 12-часовой день, а не 24-часовой день. – Jack

Смежные вопросы