web-dev-qa-db-fra.com

Définition d'une minuterie dans Node.js

J'ai besoin d'exécuter du code dans Node.js toutes les 24 heures. Je suis tombé sur une fonction appelée setTimeout. Ci-dessous mon extrait de code

var et = require('elementtree');
var XML = et.XML;
var ElementTree = et.ElementTree;
var element = et.Element;
var subElement = et.SubElement;
var data='<?xml version="1.0"?><entries><entry><TenantId>12345</TenantId><ServiceName>MaaS</ServiceName><ResourceID>enAAAA</ResourceID><UsageID>550e8400-e29b-41d4-a716-446655440000</UsageID><EventType>create</EventType><category term="monitoring.entity.create"/><DataCenter>global</DataCenter><Region>global</Region><StartTime>Sun Apr 29 2012 16:37:32 GMT-0700 (PDT)</StartTime><ResourceName>entity</ResourceName></entry><entry><TenantId>44445</TenantId><ServiceName>MaaS</ServiceName><ResourceID>enAAAA</ResourceID><UsageID>550e8400-e29b-41d4-a716-fffffffff000</UsageID><EventType>update</EventType><category term="monitoring.entity.update"/><DataCenter>global</DataCenter><Region>global</Region><StartTime>Sun Apr 29 2012 16:40:32 GMT-0700 (PDT)</StartTime><ResourceName>entity</ResourceName></entry></entries>'
etree = et.parse(data);
var t = process.hrtime();
// [ 1800216, 927643717 ]

setTimeout(function () {
  t = process.hrtime(t);
  // [ 1, 6962306 ]
  console.log(etree.findall('./entry/TenantId').length); // 2
  console.log('benchmark took %d seconds and %d nanoseconds', t[0], t[1]);
  //benchmark took 1 seconds and 6962306 nanoseconds
},1000);

Je veux exécuter le code ci-dessus une fois par heure et analyser les données. Pour ma référence, j'avais utilisé une seconde comme valeur de minuterie. Toute idée de la façon de procéder sera très utile.

18
Amanda G

Il y a essentiellement trois façons de procéder

  1. setInterval()

La fonction setTimeout(f, n) attend n millisecondes et appelle la fonction f. La fonction setInterval(f, n) appelle f toutes les n millisecondes.

setInterval(function(){
  console.log('test');
}, 60 * 60 * 1000);      

Ceci imprime test toutes les heures. Vous pouvez simplement lancer votre code (sauf les instructions require) dans une setInterval(). Cependant, cela me semble plutôt laid. Je préfère aller avec:

  1. Tâches planifiées La plupart des systèmes d'exploitation ont un moyen de délester les tâches. Sous Windows, cela s'appelle " Tâches planifiées " sous Linux, recherchez cron.

  2. tilisez une bibliothèque Comme je l'ai réalisé en répondant, on pourrait même voir cela comme un double de cette question.

41
Viehzeug