2016-05-11 17 views
6

Ho un problema strano in cui i setTimeout lunghi non si attivano su Raspberry PI, ma lo fanno su Ubuntu/x64 e OSX.Long setTimeout in NodeJS su Raspberry PI

'use strict'; 

const delay = 1000 * 3600 * 8; 
const date = new Date(); 

date.setTime(new Date().getTime() + delay); 
console.log('Alarm set to', date.toString()); 

setTimeout(function() { 
    console.log('Alarm!', new Date()); 
}, delay); 

Questo codice eco Alarm! dopo 8 ore su Ubuntu/x64, ma non è mai lanciato su RPI.

Works:

  • Ubuntu/x64
  • OSX

Non funziona:

  • RPI B + con Raspian 7 (Nodo 6.1)
  • RPI 3 con Raspian 8 (Nodo 4.4.4, 6.0 e 6.1)

Secondo ps lo script è in Sl Stato: Interruptible sleep (waiting for an event to complete), is multi-threaded (using CLONE_THREAD, like NPTL pthreads do).

In una versione più complessa di questo codice, dove posso controllare lo script attraverso un'interfaccia utente Web, il "allarme" si spegne dopo il set tempo, ma solo quando accedo all'interfaccia utente Web (per riattivare l'applicazione?).

Si tratta di un bug NodeJS o sto facendo qualcosa di funky?

+1

trovato questo, sembra essere un problema noto: https://github.com/nodejs/node/issues/4262 – Znarkus

+0

ho sperimentato lo stesso. Questo problema è ancora in sospeso – jamesfmackenzie

risposta

0

L'aggiunta di questo risolve il problema fino a quando il problema NodeJS non viene risolto.

// Every 20 min to keep awake 
setInterval(() => 1, 1000 * 60 * 20);