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