【问题标题】:Mongoose - setting virtuals via return on callback function [duplicate]Mongoose - 通过回调函数返回设置虚拟
【发布时间】:2014-07-19 10:21:07
【问题描述】:

我在 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
    })

});

任何帮助将不胜感激!

【问题讨论】:

  • 还有另一种解决方案。让你的 virtual 成为一个接受回调的函数。

标签: javascript node.js mongodb callback mongoose


【解决方案1】:

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

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);
});

});

然后调用你会做的函数(请原谅我调用虚方法的语法。不是 100% 确定它在 Mongoose 中是如何工作的):

UserSchema.info(function(err, data) {
    // check if there was an error
    // if not then do whatever with the data
}

【讨论】:

    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2010-10-31
    相关资源
    最近更新 更多