如何在Mongoose / nodejs中访问回调函数中的值?

时间:2013-01-14 14:27:53

标签: node.js callback mongoose

我编写了一个使用Mongoose从mongoDB中读取项目的函数,我希望将结果返回给调用者:

ecommerceSchema.methods.GetItemBySku = function (req, res) {
    var InventoryItemModel = EntityCache.InventoryItem;

    var myItem;
    InventoryItemModel.findOne({'Sku' : req.query.sku}, function (err, item) {
        // the result is in item
        myItem = item;
        //return item doesn't work here!!!!
    });

    //the value of "myItem" is undefined because nodejs's non-blocking feature
    return myItem;
};

但是如您所见,结果仅在“findOne”的回调函数中有效。我只需要将“item”的值返回给调用函数,而不是在回调函数中进行任何处理。有没有办法做到这一点?

非常感谢!

1 个答案:

答案 0 :(得分:1)

因为你在函数中进行异步调用,所以你需要在 GetItemBySku 方法中添加一个回调参数,而不是直接返回该项。 / p>

ecommerceSchema.methods.GetItemBySku = function (req, res, callback) {
    var InventoryItemModel = EntityCache.InventoryItem;

    InventoryItemModel.findOne({'Sku' : req.query.sku}, function (err, item) {
        if (err) {
            return callback(err);
        }
        callback(null, item)
    });
};

然后,当您在代码中调用 GetItemBySku 时,该值将在回调函数中返回。例如:

eCommerceObject.GetItemBySku(req, res, function (err, item) {
    if (err) {
        console.log('An error occurred!');
    }
    else {
        console.log('Look, an item!')
        console.log(item)
    }
});