2013-08-04 12 views
14

Używanie node.js z firewallem npm.Proces węzła nie jest zamykany po wykonaniu operacji firebase raz

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

Dlaczego nie węzeł wyjść, gdy odbywa się odczyt danych?

+0

Że 3. linia jest przypuszczać, aby być 'once' lub' on'? – Ali

+0

To powinno być raz. –

Odpowiedz

9

Aktualizacja

Należy pamiętać, że to nie ma już zastosowania. Node.js nie będzie dłużej zawieszał się podczas używania once(), chociaż pozostanie otwarty, dopóki aktywny subskrybenci zasubskrybują zdalny serwer.

Original

Proces Firebase otwiera gniazda do serwera i ustala słuchaczy przychodzących danych dotyczących tych połączeń. Podobnie jak serwer sieciowy oczekujący na przychodzące połączenia HTTP, proces ten jest otwarty.

Aby zakończyć ten proces, można po prostu wykorzystać process.exit() od wewnątrz wywołania zwrotnego:

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

Używam Node.js i Firebase do opracowania lambda AWS. Call lambda zakończy się niepowodzeniem, jeśli wywołasz process.exit(), ale jeśli nic nie zrobię, upłynie limit czasu. database.goOffline() nie działa. Jakieś lepsze rozwiązanie? – syshen

+1

@syshen in Lambda należy zamiast tego wywoływać 'context.succeed()'. – idbehold

+0

z 'process.exit()' proces się kończy, ale nie otrzymuję danych zapisanych do bazy danych. Czy ktoś wpadł na ten problem? – grigy

12

w nowym Firebase API należy użyć firebase.app.App.delete() aby zwolnić zasoby swój udział. Na przykład:

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

// Do something 

app.delete(); // Release resources 

Nie używaj process.exit() ponieważ będzie zatrzymać cały proces (co nie jest to, czego można zwykle chcemy).

+0

Możesz także użyć 'var firebase = require (" firebase ") firebase.app ('[DEFAULT]') .delete() ' –

+0

Ale jak mogę przestać słuchać' '' .on ('value', function() {}) '' '? Mam formularz wyszukiwania i muszę przerwać słuchanie, aby rozpocząć kolejne z innymi parametrami. – JCarlos

+2

Użycie '' 'app.delete()' '' nie kończy mojego procesu po zalogowaniu się i wylogowaniu. Masz szczęście? Oto mój minimalny przykład: https://gist.github.com/juriejan/2134fc2569e56a24fc9b886f1f156198 – juriejan

6

Mój przypadek jest za pomocą Firebase administratora,

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

i mogę zakończyć proces węzła przez

return admin.app().delete(); 
Powiązane problemy