2013-08-04 20 views
14

Utilizzo di node.js con il firebase npm.non si chiude dopo Firebase una volta

var firebase = require('firebase'); 
var blahFirebase = new firebase('https://myfirebase.firebaseIO.com/blah'); 
blahFirebase.once('value', function (snapshot) { 
    // 
}); 

Perché il nodo non esce quando ha finito di leggere i dati?

+0

Quella linea 3 è supponiamo di essere '' once' o on'? – Ali

+0

Dovrebbe essere una volta. –

risposta

9

Aggiornamento

Si noti che questo non è più applicabile. Node.js non si bloccherà più quando si usa once(), sebbene rimarrà aperto finché ci sono ascoltatori attivi iscritti al server remoto.

originale

Il processo Firebase apre socket per il server e stabilisce gli ascoltatori per i dati in arrivo su tali collegamenti. Proprio come un server web nodo, in attesa di connessioni HTTP in arrivo, questo mantiene aperto il processo.

Per terminare il processo, si può semplicemente utilizzare process.exit() dall'interno del callback:

blahFirebase.once('value', function (snapshot) { 
    // 
    process.exit(); 
}); 
+3

Sto utilizzando Node.js e Firebase per sviluppare un lambda AWS. Chiamare lambda fallirebbe se chiamassi process.exit(), ma se non faccio nulla, si spegnerà. database.goOffline() non funziona. Qualche soluzione migliore? – syshen

+1

@syshen in Lambda dovresti chiamare 'context.succeed()'. – idbehold

+0

con 'process.exit()' il processo termina ma non ottengo dati scritti nel database. Qualcuno si è imbattuto in questo problema? – grigy

12

Nella nuova API Firebase si dovrebbe usare firebase.app.App.delete() per liberare le risorse sua partecipazione. Per esempio:

var app = firebase.initializeApp({ ... }); 
var db = firebase.database(); 

// Do something 

app.delete(); // Release resources 

Non utilizzare process.exit() poiché si fermerà l'intero processo (che non è quello che di solito vuole).

+0

Puoi anche usare 'var firebase = require (" firebase ") firebase.app ('[DEFAULT]') .delete() ' –

+0

Ma come posso smettere di ascoltare un' '' .on ('value', function() {}) '' '? Ho un modulo di ricerca e devo interrompere l'ascolto per avviarne un altro con parametri diversi. – JCarlos

+2

Usando '' 'app.delete()' '' non esce dal mio processo dopo aver effettuato l'accesso e disconnettendo. Hai avuto fortuna con questo? Ecco il mio esempio minimo: https://gist.github.com/juriejan/2134fc2569e56a24fc9b886f1f156198 – juriejan

6

Il mio caso sta usando Admin Firebase,

const admin = require('firebase-admin'); 

e posso concludere processo nodo da

return admin.app().delete(); 
Problemi correlati