Javascript 在Mongoose之外的函数中返回数据
我正在编写一个函数,希望能够返回Mongoose查询数据,以便使用它。但是,我只能在.exec函数中访问sum。我如何将它从外部获取,以便在调用函数时返回它Javascript 在Mongoose之外的函数中返回数据,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在编写一个函数,希望能够返回Mongoose查询数据,以便使用它。但是,我只能在.exec函数中访问sum。我如何将它从外部获取,以便在调用函数时返回它 function get_likes(user){ var Image = require('./models/image'); var query = Image.find({'author' : user}); query.exec(function (err, collected) { if
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;
}
函数获取喜好(用户){
变量图像=需要('./模型/图像');
var query=Image.find({'author':user});
exec(函数(err,collected){
if(err)返回控制台。error(err);
var总和=0;
对于(var i=0;i您不能直接执行。node.js使用回调和事件来处理其异步操作。您最好接受这一点
您可以通过采用promise库()间接实现这一点,但这只是一种伪造的同步操作。使用回调函数进行响应
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);
});
}
函数get_likes(用户,cb){
var Image=require(“./models/Image”)
var query=Image.find({'author':user});
exec(函数(err,collected){
if(err)返回控制台。error(err);
var总和=0;
对于(var i=0;i您的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);
});
}
函数get_likes(用户,回调){
变量图像=需要('./模型/图像');
var query=Image.find({'author':user});
exec(函数(err,collected){
if(err)返回回调(err);
var总和=0;
对于(var i=0;iWell,变量的作用域是函数
,因此您可以在发送到query.exec()的回调函数上方声明sum
)
…但如果这是异步的,所有这些都无关紧要。exec函数内部的迭代不会影响sum变量。sum只是保持为0.yes。(query.exec)is和async function.sum将不可用。对不起,我将编辑答案。如何调用回调函数?作为回调参数传递什么?只需调用带有参数的函数即可。例如:调用带有参数的函数即可。在本例中,第二个参数是函数(cb)。此参数可在get likes函数内访问并调用。例如:get_likes(用户,函数(sum){//此处使用sum.});这是用回调完成的异步编程。如果你想摆脱这种回调循环,请使用承诺。关于get likes的定义,请参考我上面的答案。那么我如何调用它?我要传递给回调参数什么?get_likes(user,function(err,sum){If(!err){console.log(sum);//用sum做你想做的事}else{//处理错误}});是否确定?是否将函数作为回调传递?
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);
});
}