2014-10-10 130 views
0

在節點JS中,我只是想編寫一些外部方法,它從mongodb中檢索數據並返回它。在此我使用MongoClient.js模塊與mongodb進行交互。但問題是調用外部方法時,它在數據庫連接方法完成執行之前返回值。在這裏,我只想保留我的回覆聲明,直到mongodb.connect方法完成。該怎麼辦? 這裏我的代碼如下,Node.js使用mongoclient連接mongodb

service.js

var employee = require('./model/employeeService.js'); 
var json = employee.getUser(employeeId); 

哪裏的EmployeeService作爲模型與數據庫進行交互,將數據返回到service.js在那裏我們的Web服務的書面和它響應用戶。

employeeService.js

exports.getUser = function(employeeId) { 
    var json = []; 
    MongoClient.connect(db.getdbUrl(),function(err,db){ 
     if(err) { 
      json = err; 
     }else { 
      document = (employeeId)?{_id:employeeId}:{}; 
      db.collection('Employee').find(document).limit(50).toArray(function(err,users){ 
      if(err) { 
       json = err; 
      } 
      else { 
        console.log("Inside MongoClient"); // this will executes second 
        json = users; 
       } 
      }); 
     } 
    }); 
    console.log("OutSide",json); // this executes first 
    return json; 
} 

在這裏我可以從service.js調用它找到我的輸出控制檯和越來越空陣列連接MongoClient.connect法的異步執行流程。

結果控制檯

OutSide [] 
Inside MongoClient 

回答

0

這是not異常流量,這是怎樣的asynchronous代碼執行。如果要返回用戶,請將其返回else{},將json = users;替換爲return users;,並在代碼結尾處刪除返回。

然後去了解更多關於Asynchrounous vs Synchrounous調用以及它們如何執行的內容。還可以考慮在Javascript中學習callback