Isa*_*son 4 javascript asynchronous braintree meteor
我正在努力让Braintree Payments在Meteor应用程序中运行.我一直试图返回生成令牌(服务器端,通过Meteor方法)的结果,以便在客户端使用.
我试过这个:
/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
}
})
Run Code Online (Sandbox Code Playgroud)
返回true
.
我也试过这个:
Meteor.methods({
createClientToken: function() {
var clientToken
gateway.clientToken.generate({
customerId: this.userId
}, function(err, response) {
clientToken = response.clientToken
}
)
console.log(clientToken)
return clientToken
}
})
Run Code Online (Sandbox Code Playgroud)
哪个回报undefined
.
将function(err, response)
被异步调用,是吗?如果是这样,那就是问题的解释.似乎尝试从异步函数返回值是Javascript中的一个痛点.我已经阅读了一些SO答案(就像这一个,这一个和这一个),但似乎没有一个让我朝着正确的方向前进.
另外,我相信我可能需要使用Meteor的wrapAsync
方法,对吗?我已经试过这(发现这个和这个相关的等等吧题),但似乎仍不能得到正确的事情.
感谢任何反馈.
更新:
有关将Braintree与Meteor集成的工作方法,请查看示例repo(非常感谢@Nick Tomlin)
免责声明:我为Braintree工作:)
我不熟悉Meteor,但是@mrak指出它clientToken.generate
是异步的,你肯定会在你的方法中适当地处理它.
在您当前的代码中,clientToken
未定义因为console.log(clientToken)
在您clientToken
从回调中收到a之前立即执行clientToken.generate
.如果您习惯于在同步问题中进行编码,异步编程可能需要一段时间才能完成,但是有很多资源可以帮助您(这里是一个).
看来Meteor.wrapAsync
确实会提供您所需要的,这是一个未经测试的示例实现.
Meteor.methods({
createClientToken: function() {
var createToken = Meteor.wrapAsync(gateway.clientToken.generate, gateway.clientToken);
var response = createToken({});
return response.clientToken;
}
});
Run Code Online (Sandbox Code Playgroud)
更新
我已经创建了一个非常基本的Braintree + Meteor应用程序,可能对您有用(如果不是,请在GH repo上提出问题以帮助改进它!)
归档时间: |
|
查看次数: |
732 次 |
最近记录: |