我想让你帮忙翻译一篇关于IT技术的文章。这篇文章涉及与Meteor应用程序中使用Braintree支付有关的内容。我的问题是,无法将通过Meteor Method(在服务器端)生成的令牌结果返回给客户端。
我已经尝试了以下方法:
/server/braintree.js
Meteor.methods({
createClientToken: function() {
var token = gateway.clientToken.generate({
customerId: this.userId
}, function(err, response) {
clientToken = response.clientToken
return clientToken
}
)
console.log(token)
return token
}
})
该函数返回true
。
我也尝试了这个:
Meteor.methods({
createClientToken: function() {
var clientToken
gateway.clientToken.generate({
customerId: this.userId
}, function(err, response) {
clientToken = response.clientToken
}
)
console.log(clientToken)
return clientToken
}
})
这将返回undefined
。
这个function(err, response)
是异步调用的,对吗?如果是的话,那就是问题的原因了。似乎在JavaScript中尝试从异步函数返回值是一个痛点。我已经阅读了许多相关的SO答案(比如这个、这个和这个),但没有一个看起来能指导我正确方向。
此外,我认为我可能需要使用Meteor的wrapAsync
方法,对吗?我已经尝试过这个方法(并找到了一些相关的SO问题,比如这个和这个),但仍然无法得到正确的结果。
非常感谢任何反馈。
更新:
关于如何将Braintree与Meteor集成的可行方法,请查看示例存储库(非常感谢@Nick Tomlin提供此方法)。
gateway.clientToken.generate
的回调函数function(err, response)
是异步调用的。但是,我无法保证Meteor特定的解决方法是否可行。 :( - mrak