2016-07-21 8 views
0

データを正常に返すNode.jsで実行される単純なFirebaseクエリがあります。ただし、Node.jsアプリケーションは終了しません。 Firebaseが完了するのを待っているかのようにハングします。 Node.jsアプリケーションが完了するようにこれを実装する正しい方法は何ですか?Node.js Firebaseデータベースクエリを呼び出すときにアプリケーションが終了しない

参考文献:

維持する私たちの約束(およびコールバック) https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html

のNode.js Firebaseクエリ https://firebase.google.com/docs/reference/node/firebase.database.Query

コード:

は、私は、製品のURLがどうかを確認する方法が存在する呼び出しFirebaseに存在します。

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

Firebaseに製品URLが存在するかどうかを確認する方法。約束を返します。 firebase onceメソッドの使用に注意してください。 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(); 
    }); 
} 

ANSWERから

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

コード例は:以下のフランクにより示唆されるようにprocess.exit()を使用することによってこの問題を解決することができました。

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

これは予想された動作です。 http://stackoverflow.com/questions/18046639/node-process-doesnt-exit-after-firebase-once –

答えて

0

あなたは関数から2回戻ってきますが、意味をなさない。私はあなたがこれが欲しいと信じています:

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

この戻り構文は面白く、この構文を示すFirebaseドキュメントのサンプルコードを含めるように質問を更新しました。使用されています。コードにこの変更を加えると、関数はもはや約束を返さないため、 "未定義のプロパティを読み取れません"というエラーが発生します。 –

+0

ああ - 私はそれを得ると思います。結果の機能性についても約束しています。私は混乱して問題を混乱させて申し訳ありません - 申し訳ありません! –

関連する問題