难道nodejs中的return语句跟c里边的不一样吗?这样:我在一个js文件中写了个函数,用来返回数据库打开后的db对象,内容如下:
console.log("In file db.js") ;
var mongodb=require('mongodb')
, mongoserver=new mongodb.Server('localhost',27017)
,dbweibo=new mongodb.Db('weibo',mongoserver,{w:-1});
function openedDb(){
console.log("in openedDb function")
if(dbweibo.serverConfig.connected)
return dbweibo.db;
else{
dbweibo.open(function(err,db){
if(err)
return "open db failed";
else {// console.log(db);
return db; }
})
}
}
module.exports.openedDb=openedDb;
你能看到,在最后一个return语句之前有个log语句,这时显示的内容还是一个极其复杂的db对象。 然后我在routes文件中这样写
var db=openedDb();
console.log(db);
但是这回得到的db确实undefined,我就奇怪了,return之前还是正常的db对象,怎么return之后变成undefined了?难道nodejs的return语句与java和c的return语句不通?他不应该返回那个正常的db对象吗?
说的对啊,这个return在回调函数里不可能将return的只作为openedDb的返回值。那要怎么才能正确得到这个db对象呢?这个异步特性带来的流程控制还真是麻烦啊。
一般是放个函数(马仔)近来,干完了事让马仔把东西带走。
这个是异步回调函数里返回的db对象
还是在用阻塞的思路写Node,该换换思路了
哦,类似于回调函数是吗?
刚开始学习的时候感觉不是很难,但是真的做起东西来就感觉这个异步思想还真不是一时半会能变过来的。
@sunuxreg 我也在经历这样的变化,顺序的程序流程,在这里不适合了。在这方面可以理解为颠覆式的变化。
返回值可以在回调函数里面获取,反正只要记好一点,这里面是异步的,它稀里哗啦搞定了,才会调用回调函数
写的麻烦 db一直打开不可以么
我是想,如果打开必然要用到open语句,open语句写在程序中,每次用户访问又会执行open语句,这样的话每次都要打开数据库。
@jiyinyiyong 嗯,我用回调函数试试