我正在编写一个函数,我希望能够返回我的Mongoose查询数据,所以我可以使用它。但是,我只能访问.exec函数中的sum。如何在外部获取它,以便在函数调用时返回?
function get_likes(user){
var Image = require('./models/image');
var query = Image.find({'author' : user});
query.exec(function (err, collected) {
if (err) return console.error(err);
var sum = 0;
for(var i=0;i<collected.length-1;i++){
sum += collected[i].like_count;
}
// I CAN PRINT SUM HERE
console.log(sum);
return sum;
});
// SUM DOESN'T EXIST OUT HERE.
return sum;
}
答案 0 :(得分:1)
你不能直接。 node.js使用回调和事件来处理其异步操作。你最好的选择是拥抱它。
您可以通过采用promise库(http://howtonode.org/promises)间接执行此操作,但这只是伪造同步操作。
答案 1 :(得分:0)
使用回调函数进行回复
function get_likes(user, cb){
var Image = require('./models/image')
var query = Image.find({'author' : user});
query.exec(function (err, collected) {
if (err) return console.error(err);
var sum = 0;
for(var i=0;i<collected.length-1;i++){
sum += collected[i].like_count;
}
// I CAN PRINT SUM HERE
console.log(sum);
cb(sum);
});
}
或者如果你将它用作api,你可以使用res.send({&#34; sum&#34;:sum});
function get_likes(user, req, res){
var Image = require('./models/image');
var query = Image.find({'author' : user});
query.exec(function (err, collected) {
if (err) return res.status(400).send({"error":"unable to connect"});
var sum=0;
for(var i=0;i<collected.length-1;i++){
sum += collected[i].like_count;
}
// I CAN PRINT SUM HERE
console.log(sum);
res.status(200).send({"sum": sum});
});
}
我将node / express作为示例服务器。
答案 2 :(得分:0)
你的get_likes函数是异步的,所以你应该有一个回调
function get_likes(user, callback){
var Image = require('./models/image');
var query = Image.find({'author' : user});
query.exec(function (err, collected) {
if (err) return callback(err);
var sum = 0;
for(var i=0;i<collected.length-1;i++){
sum += collected[i].like_count;
}
// I CAN PRINT SUM HERE
console.log(sum);
callback(null, sum);
});
}