/查询/ function select(a_where,a_data) {
var t_ret=0;
t_ret= db_connector.collection(a_where, function(err, collection) {
collection.find(a_data, function(err, value){
value.toArray(function(err,arr){
return ''true";
})
});
}); return ''false"; }
现在调用select 虽然里面的代码执行了可是一直返回false 我明白他为什么会返回 false 但是不知道该如何修改让他返回true
5555555555那个前辈能指点下
node的api里到处都是回调,所以我们也要习惯这种编程方式。。。 以往我们想获得方法的返回值都是这么写:var foo=bar(); 但是现在得这么写: bar( function(result){foo=result}); 推荐看一下step,可以避免callback的嵌套,https://github.com/creationix/step
还是没太懂啊
把最后 一个返回return ''false";
去除试一下,因Node操作文档用的是异步的方式。如果直接返回可能会出问题
现在没有出错,只是返回不了true
@beiyio 你那样写是不会报错,但代码执行的时候 因为find(******)的回调虽然返回了true,但不会马上执行到的,而是先执行了最后的那句return false
@beiyio 是不会报错,但代码在执行到回调方法的时候,不会等待回调都执行完了才做下一步的,而是直接跑到return false去了,所以返回的都是你最后的一句 false
@iln168 已经去掉了。但是返回的undeffind
@beiyio 你那个方法还要修改一下(我提供一下参考代码)
Foods.find = function(option, callback){
mongodb.open(function(err, db){
if(err)throw err;
db.collection('Foods', {safe : true}, function(err, collection){
collection.find({}, function(err, foods){
if(err)throw err;
callback(err, foods);
db.close();
});
});
});
}
差不多都以回调的方式,你试一下
@beiyio node里面要获得方法返回值一般不会直接用等号,像这样:var result=someFunction(); 而是传一个callback进去:
// the definition of the function
function someFunction(callback){
//do some work
callback('true')//invoke the callback to give it the result;
}
//invoke the function
someFunction(function callback(result){
//now you get the result;
});
@iln168 额。我还是写失败了~哭了。
@iln168 前辈有QQ吗,加下QQ指导下吧
@beiyio 我把代码全给你吧以下是 (1)food文件的代码
var mongodb = require('./db');
function Foods(food){
this.name = food.name;
this.imgUrl = food.imgUrl;
this.money =food.money;
this.source = food.source;
this.address = food.address;
this.time = food.time;
}
module.exports = Foods;
Foods.get = function get(option, callback){
mongodb.open(function(err, db){
if(err){
return callback(err);
}
db.collection('Foods', function(err, collection){
if(err){
mongodb.close();
return callback(err);
}
var query = {};
collection.find(query).sort({time:-1}).toArray(function(err, docs){
mongodb.close();
if(err){
return callback(err);
}
return callback(null, docs);
});
});
});
}
(2)db的代码如下 :
var setting = require('../settings'),
mongo = require('mongodb'),
Db = mongo.Db,
Connection = mongo.Connection,
Server = mongo.Server;
module.exports = new Db(setting.db, new Server(setting.host, Connection.DEFAULT_PORT, {}));
(3)你再写一个测试页:
var Foods = require('food');
Foods.get({name : 'lif_testName'}, function(err, data){
if(err)throw err;
console.log(data);
});
按上面的三步一定行的
异步
LZ上面的代码是一个异步调用的过程你return出去的是collection.find()中的回调函数的返回结果,并不是select函数返回的结果!并且这是异步调用过程,在你的collection.find()还没结束时,select函数已经执行完毕了!