Meteor wrapAsync正在使用
Meteor wrapAsync using
每个人。Meteor应用程序有点问题。需要使用对数据库的读/写来执行一些算法。但这是一个问题:每个R/W操作都依赖于以前的数据库操作。我试图使用wrapAsync方法解决这个问题,但它对我不起作用。请帮助我包装数据库调用,将其作为同步代码执行。
这是我的函数,它使用数据库调用:
function calc_item_discount(item){
var discount = 0;
while(item.count){
coupon = get_coupon(item.item_id);
if(!coupon){return discount;}
discount += (item.order_item.price /100) * coupon.discount;
use_coupon(coupon._id);
item.count--;
}
return discount;
}
以下是访问数据库的原始功能:
function get_coupon(item_id){
return coupons.findOne({menu_item_id:item_id});
}
function use_coupon(coupon_id){
coupons.update({_id:coupon_id},{
$inc:{count:-1}
});
}
我试着修改它。我得到:
function get_coupon(item_id){
var get_coupon_async = Meteor.wrapAsync(coupons.findOne({menu_item_id:item_id},function(err, res){
if(!err) {
console.log('return coupon');
return res;}
else {
console.log('retreiving coupon error');
return false;
}
}));
return get_coupon_async(item_id);
}
它返回函数代码,而不是数据库文档值。请告诉我我做错了什么。
我找到了一个解决方案。我的错误是-Meter.wrapAsync必须使用最后一个参数为回调的函数。
解决方案代码:
function use_coupon(coupon_id, callback){
coupons.update({_id:coupon_id},
{$inc:{count:-1}},
function(err,res){
callback(err,res);
});
}
var use_coupon_sync = Meteor.wrapAsync(use_coupon);
现在我可以打了
use_coupon_sync(coupon._id);
作为一个常规函数,它将同步运行并返回结果
相关文章:
- Meteor如何接收HTTP请求
- Meteor-将选定窗体中的对象添加到集合中
- Meteor上的启动页面
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- Meteor-添加用户自定义字段的方法不起作用
- Meteor忘记了密码的实现
- 链接所有<a>Meteor
- Meteor wrapAsync正在使用
- Meteor - 使用 Meteor.wrapAsync() 包装 NPM
- 如何使Meteor方法在使用wrapAsync完成内部函数后返回结果
- 带Meteor.wrapAsync()的菊花链NPM包函数
- Meteor.WrapAsync don't return value
- Meteor:在服务器上正确使用Meteor.wrapAsync
- Meteor wrapAsync with Closures
- Meteor wrapAsync同步执行,但从不返回
- Meteor WrapAsync异步工作
- Meteor Wrapasync服务器端保存api调用结果到集合
- 流星.使用Meteor.Mandrill时,wrapAsync没有返回任何值
- 如何处理Meteor.wrapAsync上的错误