我正在尝试让 Stripe 使用新的 promises 支持。
使用结帐,我获取 token 并将其发送到服务器:
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;
});
}
我可以调用该方法并执行它,但不返回任何内容。 Meteor.call
中的 console.log(err, res)
为两者返回未定义。
收费流程...并且 console.logs 显示来自 Stripe 的收费 ID,因此这似乎不是异步问题。
我是否遗漏了一些非常基本的东西?
感谢您的帮助!
最佳答案
你必须使用同步 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);
}
}
基本上,您是在尝试从回调中返回数据。您需要将数据返回
到您的meteor 方法而不是then
中的函数。
使用 Meteor._wrapAsync
使用 Fibers 等待事务完成,然后返回值或抛出错误(因此使用 try/catch)以获取错误。
关于javascript - Meteor.call 未返回响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19876609/