web-dev-qa-db-fra.com

Node.js setInterval () cesse de s'exécuter après 25 jours

Dans mon application Node.js, j'utilise setInterval() pour exécuter une fonction spécifique toutes les heures. La fonction est exécutée correctement pendant environ 25 jours, puis la minuterie arrête de se déclencher.

25 jours semble terriblement proche du TIMEOUT_MAX de Node.js (2 ^ 31 millisecondes ≈ 25 jours), mais je ne vois pas vraiment pourquoi setInterval() devrait cesser de s'exécuter après cette heure.

Mettre à jour:

Je pense que cela a peut-être été causé par le bogue suivant dans Node.js: La fonction de rappel setInterval a interrompu de manière inattendue # 22149

6
Moorglade

Il semble que le bogue ( # 22149 ) ait été corrigé dans Node.js 10.9.0 .

Il convient également de noter que ce bogue semble influencer les deux setInterval() et setTimeout() (comme indiqué ici ), de sorte que la solution de contournement avec setTimeout() dans la fonction de rappel ne fonctionne pas.

2
Moorglade

Après avoir lu le problème dans github, je pense qu'ils le résoudront dans la prochaine version. Si vous devez contourner le problème avant cela, vous pouvez plutôt essayer le délai d'attente récursif. Commander mon code:

function doSomething() {
    console.log('test');
}

function doSomethingInterval() {
   doSomething();
   setTimeout(doSomethingInterval, 1000);
}

doSomethingInterval();
0
Dat Tran

C'est un bug connu. La solution de contournement la plus simple consiste à utiliser setTimeout à la place, puis dans votre fonction de rappel, appelez un autre setTimeout.

0
Prodigle