Javascript Mongoose-通过回调函数返回设置虚拟对象

Javascript Mongoose-通过回调函数返回设置虚拟对象,javascript,node.js,mongodb,callback,mongoose,Javascript,Node.js,Mongodb,Callback,Mongoose,我看到stackoverflow到处都贴着类似的问题,但似乎找不到满意的答案 我使用MongooseJS作为我的ODM,我尝试设置虚拟getter,而不是从不同的集合中查询、分析和返回信息 不幸的是,(由于nodejs的异步性质),我无法从回调函数中返回信息。有没有一个简单的方法 这是我的密码: UserSchema.virtual('info').get(function () { var data = { a: 0, b: 0 };

我看到stackoverflow到处都贴着类似的问题,但似乎找不到满意的答案

我使用MongooseJS作为我的ODM,我尝试设置虚拟getter,而不是从不同的集合中查询、分析和返回信息

不幸的是,(由于nodejs的异步性质),我无法从回调函数中返回信息。有没有一个简单的方法

这是我的密码:

UserSchema.virtual('info').get(function () {

    var data = {
        a: 0,
        b: 0
    };

    OtherSchema.find({}, function (err, results) {
        results.forEach(function (result) {
            if (result.open) {
                data.a += 1
            } else {
                data.b += 1
            }
        });
        return data; //return this information
    })

});

任何帮助都将不胜感激

您需要将回调函数传递到虚拟方法中,如下所示:

UserSchema.virtual('info').get(function (cb) {

var data = {
    a: 0,
    b: 0
};

OtherSchema.find({}, function(err, results) {
    if (err) {
        // pass the error back to the calling function if it exists
        return cb(err);
    }

    results.forEach(function(result) {
        if(result.open) { data.a+=1 }
            else{data.b+=1}
    });

    // pass null back for the error and data back as the response
    cb(null, data);
});

});
然后调用您将要执行的函数(请原谅我调用虚拟方法的语法。不完全确定在Mongoose中如何工作):


还有另一个解决办法。使虚拟机成为接受回调的函数。
UserSchema.info(function(err, data) {
    // check if there was an error
    // if not then do whatever with the data
}