Публикации - Node.js

Ядро Node - Таймерные методы

К таймерным относятся следующие функции: setTimeout, clearTimeout, setInterval и clearInterval.

setTimeout()

Рассмотрим функцию setTimeout. В качестве первого параметра, используется функция обратного вызова, второй параметр – время задержки в милисекундах (причем, нет никаких гарантий, что функция обратного вызова сработает ровно через n милисекунд, независимо от значения n, поскольку мы не можем полностью контроллировать серверную среду), после чего может следовать необязательные параметры настроек.

setTimeout(function(){
 callback(val)
}, 2000); 

И еще один пример использования setTimeout с дополнительным параметром и с вызовом внешней функции.

setTimeout(myfunc, 2000, morevar);
function(morevar){
 console.log(morevar);
} 

clearTimeout()

Функция clearTimeout сбрасывает параметры заданные функцией setTimeout.

setTimeout(myfunc, 2000, morevar);
function(morevar){
 console.log(morevar);
} 

setInterval()

Для периодического запуска какой-либо функции идеально подходит setInterval. Синтаксис вызова похож на вызов функции setTimeout. Только функция обратного вызова будет вызываться столько раз, сколько задано вторым параметром. Сбросить заданный интервал можно вызовом функции clearInterval.

Особенность работы таймерных функций заключается в том, что пока есть активный таймер, node.js не может завершить процесс.

Для любой таймерной функции мы можем вызывать метод unref(), который делает таймерную функцию второстепенной, т.е. node.js ее не учитывает при проверке внутренних процессов.

Рассмотрим листинг с двумя таймерными функциями: setTimeout и setInterval. Без метода .unref() функция setInterval() будет работать постоянно, несмотря на то, что в функции setTimeout вызывается закрытие сервера через 3 сек.

var http = require('http');
var server = new http.Server(function(req, res){
}).listen(3000);
setTimeout(function(){
 server.close();
}, 3000);
var timer = setInterval(function(){
  console.log(process.memoryUsage());
}, 1000);
timer.unref();

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться