猫鼬没有回报价值

时间:2015-03-02 17:27:49

标签: mongoose

函数GetByName有效,因为结果正确打印到控制台,但我没有返回值。有人可以告诉我哪里出错了。

supportDoc.tagId = GetByName(item.tagName); <-- returns undefined


function GetByName(name) {
model.Shared_SupportTag.findOne({name : name}).exec(function (err, result) {
    if (result.length === 0) {
        console.log('Not Found')
    } else {
        console.log(result._id);
        return (result._id)
    };
});

更新:

复制了victorkohl的建议,仍然是错误。

值正在传递,但仍然出现错误。这是intellisense,console和&#34;外键&#34;属性。

enter image description here

解决:

victorkohl是正确的,我只需要在最后将函数调用放到GetByName并在其中包含save方法。

   model.Shared_SupportDoc.find({}).exec(function (err, collection) {
                var supportDocs = require('../../data/_seed/support/supportDocs.json');
                if (collection.length === 0) {
                    supportDocs.forEach(function (item) {
                        ....
                        supportDoc.icon = item.icon;
                        supportDoc.likeCount = item.likeCount || 7;
            GetByName(item.category, function(tagId) {
                supportDoc.categoryId = tagId;
                supportDoc.save(function (err) {
                    if (err) {
                        console.log(supportDoc.categoryId)
                        console.log('Error: ' + err);
                    } else {
                        console.log('Support Doc Seed Complete');
                    }
                });
            });

1 个答案:

答案 0 :(得分:0)

您正在尝试使用异步方法执行同步任务。传递给.exec()的函数是异步执行的,因此,函数GetByName在函数执行之前返回(没有值,因此undefined结果)。

您应该使GetByName函数也异步运行,例如:

GetByName(item.tagName, function(tagId) {
    supportDoc.tagId = tagId;
});


function GetByName(name, next) {
    model.Shared_SupportTag.findOne({name : name}).exec(function (err, result) {
        if (!result) {
            console.log('Not Found');
            next();
        } else {
            console.log(result._id);
            next(result._id);
        }
    });
}