1

我编写了一个使用 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”的值返回给调用者函数,而不是在回调函数中进行任何处理。有没有办法做到这一点?

非常感谢你!

4

1 回答 1

1

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

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)
    }
});
于 2013-01-14T14:51:28.477 回答