2016-07-21 1 views
0

Ich habe eine einfache Firebase-Abfrage in Node.js ausgeführt, die Daten erfolgreich zurückgibt. Die Node.js-App wird jedoch nicht beendet. Es hängt so, als ob es auf etwas gewartet hat, das Firebase komplett ist. Was ist der richtige Weg dies zu implementieren, damit die Node.js App fertig ist?Die Anwendung "Node.js" wird beim Aufruf der Firebase-Datenbankabfrage nicht beendet

Referenzen:

halten unsere Versprechen (und Rückrufe) https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html

Node.js Firebase Abfrage https://firebase.google.com/docs/reference/node/firebase.database.Query

Code:

Rufen Sie meine Methode, wenn ein Produkt URL zu sehen gibt existiert in Firebase.

firebase.exists(url) 
    .then(data => console.log(data)) 
    .catch(data => console.log(data)); 

Methode zur Überprüfung, ob die Produkt-URL in Firebase vorhanden ist. Gibt ein Versprechen zurück. Beachten Sie die Verwendung der Firebase-Methode.

public exists(url): any { 
    return this.firebase.database().ref('products/').orderByChild("url").equalTo(url).once("value").then(function (snapshot) { 
     return snapshot.exists(); 
    }); 
} 

Codebeispiel von https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html

// Fetch a Blog Post by ID. Returns a Promise of an actual object, not a DataSnapshot. 
function getArticlePromise(id) { 
    return ref.child('blogposts').child(id).once('value').then(function(snapshot) { 
    return snapshot.val(); 
    }); 
} 

ANTWORT: War in der Lage, dies zu lösen, indem process.exit() verwenden, wie unten von Frank vorgeschlagen.

firebase.exists(url) 
    .then(data => { console.log(data); process.exit(); }) 
    .catch(data => console.log(data)); 
+1

Dies ist das erwartete Verhalten. Siehe http://stackoverflow.com/questions/18046639/node-process-doesnt-exit-after-firebase-once –

Antwort

0

Sie kommen zweimal von der Funktion zurück, was keinen Sinn ergibt. Ich glaube, du willst das:

public exists(url): any { 
    this.firebase.database().ref('products/').orderByChild("url").equalTo(url).once("value").then(function (snapshot) { 
     return snapshot.exists(); 
    }); 
} 
+0

Diese Rückkehrsyntax ist interessant und ich habe meine Frage aktualisiert, um Beispielcode aus Firebase-Dokumentation, die diese Syntax zeigt, zu enthalten verwendet werden. Wenn Sie diese Änderung im Code vornehmen, wird die Fehlermeldung "Kann die Eigenschaft nicht lesen und dann nicht definiert" zurückgegeben, da die Funktion keine Zusage mehr zurückgibt. –

+0

Ah - ich glaube, ich verstehe - du gibst auch ein Versprechen mit der Funktionalität des Ergebnisses. Es tut mir leid, dass ich das Problem mit meiner Verwirrung getrübt habe - bitte entschuldigen Sie! –

Verwandte Themen