我正在尝试让Stripe使用新的promises支持。
使用checkout,我获取令牌并将其发送到服务器:
Meteor.call('submit_charge', res.id, fee, name, reg, function (err, res) {
console.log(err, res);
});
服务器方法定义为:
submit_charge: function(tok, amt, name, reg) {
var Stripe = StripeAPI('privatekey');
console.log('Submitting charge for ' + name);
Stripe.charges.create({
amount: amt,
currency: "usd",
card: tok,
description: "Payment - " + name,
metadata: {
'reg': reg
},
}).then(function(charge) {
console.log('Charge: ' + charge.id);
return charge.id;
}, function(err) {
console.log('Error: ' + err);
return 0;
});
}
我可以调用该方法并执行,但不会返回任何内容。 console.log(err, res)
中的Meteor.call
为两者返回undefined。
收费流程......以及console.logs显示Stripe的收费ID,因此它似乎不是异步问题。
我错过了一些非常基本的东西吗?
感谢您的帮助!
答案 0 :(得分:2)
您必须使用同步javascript:
submit_charge: function(tok, amt, name, reg) {
var Stripe = StripeAPI('privatekey');
console.log('Submitting charge for ' + name);
var createCharge = Meteor._wrapAsync(Stripe.charges.create.bind(Stripe.charges));
try {
var result = createCharge({
amount: amt,
currency: "usd",
card: tok,
description: "Payment - " + name,
metadata: {
'reg': reg
});
return result;
}
catch(e) {
//Error
console.log(e);
}
}
基本上你是在尝试从回调中返回数据。您需要{me}方法的return
数据,而不是then
中的函数。
使用Meteor._wrapAsync
使用Fibers等待事务完成然后返回值或抛出错误(因此try / catch)以获取错误。