2014-10-10 99 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