2016-09-13 1 views
0

を取得するためにFirebaseを使用している場合があり、私の問題の簡単な解決策は、おそらくですが、私は問題のまわりで私の頭を包むように見えることはできません。Node.jsの中で)(次を呼び出すようにすると、データ

問題がある:私は私が作成していますアプリのためのexpress.jsフレームワークとのNode.jsを使用しています。私はFirebase.jsもデータベースとして使用しています。私はミドルウェアを理解し始めており、クライアントにレスポンスを送る前にミドルウェアを使ってデータを取得する方法を理解し始めています。

私の問題は、そうのように)私はFirebase内の子ノードをループにしたい場合は、私は彼らのdatasnap.forEachを(使用したいということ、しかしです:

var scoresRef = db.ref("scores"); 
    scoresRef.orderByValue().on("value", function(snapshot) { 
    snapshot.forEach(function(data) { 
    console.log("The " + data.key + " dinosaur's score is " + data.val()); 
    }); 
}); 

だから私はどのモジュールを持って言うことができますすべての恐竜の値を取得する必要があり、私はこれを行うことができます。サーバーが停止しないように

var dinoModule = {}; 
dinoModule.getDinosaurs = function(req, res, next){ 
    var dinoRef = firebase.database().ref("dinosaurs"); 
    dinoRef.orderByValue().on('value', function(snapshot){ 
     snapshot.forEach(function(data){ 
      // do something with the data here 
      // Calling next() here is wrong 
     }); 
     // Should I call next() here? 
    }); 
} 

しかし、私は次の関数を呼び出す必要がありますか?

答えて

-1

あなたはnodejsで約束を知っていますか? あなたの問題を解決するには、ここで約束する必要があります。

var async = require('async'); 
var dinoModule = {}; 
dinoModule.getDinosaurs = function(req, res, next){ 
    var dinoRef = firebase.database().ref("dinosaurs"); 
    dinoRef.orderByValue().on('value', function(snapshot){ 
     async.eachSeries(snapshot,fucntion(data,callback){ 
      //call the callback() here after success 
      //in case of errors call callback(err) where err is error object 
     },function(err){ 
      if(err){ 
      //this will be called in case of error 
      }else{ 
      //this will be called for success after interation over 
      //call next() here 
      } 
      }) 
    }); 
} 
+2

答えが少し不明です...はい、約束はこの問題を解決する可能性がありますが、あなたのサンプルコードは約束を使用しません。 –

+0

ここではasyncを使用しています。これもコードをブロックして目的を果たします。 –

関連する問題