编程语言
首页 > 编程语言> > javascript – Meteor Braintree – 通过Meteor方法创建客户端令牌

javascript – Meteor 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
  }
})

返回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.

函数(错误,响应)被异步调用,是吗?如果是这样,那就是问题的解释.似乎尝试从异步函数返回值是Javascript中的一个痛点.我已经阅读了一些SO答案(如this one,this onethis one),但似乎没有一个能让我朝着正确的方向前进.

另外,我相信我可能需要使用Meteor的wrapAsync方法,对吗?我试过这个(并在其上找到了thisthis相关的SO问题),但似乎仍然无法把事情做对.

感谢任何反馈.

更新:

有关将Braintree与Meteor集成的工作方法,请查看example repo(非常感谢@Nick Tomlin)

解决方法:

免责声明:我为Braintree工作:)

我不熟悉Meteor,但正如@mrak所说,clientToken.generate是异步的,你肯定会在你的方法中适当地处理它.

在您当前的代码中,clientToken是未定义的,因为在从clientToken.generate的回调接收到clientToken之前,console.log(clientToken)会立即执行.如果您习惯于在同步问题中进行编码,异步编程可能需要一段时间才能完成,但是有很多资源可以帮助您(这里是one).

看来Meteor.wrapAsync确实会提供你需要的东西,这是一个未经测试的示例实现.

Meteor.methods({
  createClientToken: function() {
    var createToken = Meteor.wrapAsync(gateway.clientToken.generate, gateway.clientToken);

    var response = createToken({});

    return response.clientToken;
  }
});

更新

我已经创建了一个非常基本的Braintree + Meteor application,可能对您有用(如果不是,请在GH回购中提出问题以帮助改进它!)

标签:javascript,asynchronous,meteor,braintree
来源: https://codeday.me/bug/20190528/1172070.html