2016-09-13 57 views
0

對於我的問題,可能有一個簡單的解決方案,但似乎無法解決問題。使用Firebase獲取數據時,何時調用node.js中的next()

問題是:我正在爲我創建的應用程序使用node.js和express.js框架。我也使用Firebase.js作爲我的數據庫。我開始瞭解中間件,以及在將響應發送給客戶端之前,我們如何使用它來獲取數據。

我的問題是但是,如果我通過火力地堡子節點要循環,我想用自己的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中的promise嗎? 你需要在這裏使用promise來解決你的問題。

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

我們在這裏使用異步,這也給代碼中的阻塞,從而達到目的。 –

相關問題