获得流星呼叫以返回条带支付响应

asi*_*elf 5 node.js stripe-payments meteor

我一直在使用Meteor和条纹包来试图成为一个客户.所以首先我有我的客户端代码调用服务器上的方法所以当我点击我在client.js时:

Meteor.call('usersignup', function (error, result) {
    console.log (result);
});
Run Code Online (Sandbox Code Playgroud)

所以这会调用server.js上的Method:

var Future = Npm.require('fibers/future');
var stripe = StripeAPI('my key'); // secret stripe API key

Meteor.methods({

    usersignup: function(cusEmail){
        var fut = new Future();

        stripe.customers.create(
            { email: cusEmail },
            function(err, customer) {
                if (err) {
                    console.log(err);
                    fut.ret;
                }
                fut.ret(customer);
            }
            );
        return fut.wait();
    },

    userfail: function(cusid){
        var fut = new Future();

        stripe.customers.retrieve(cusid, function(err, result) {
            if(err){
                    console.log(err);
                    fut.ret;
                }
                fut.ret(err, result);
            });
        return fut.wait();
    }

});
Run Code Online (Sandbox Code Playgroud)

现在,当我登录stripe.com仪表板时,这可以工作并创建一个客户,但我正在尝试将响应返回到客户端,至少现在是客户ID并将其打印在控制台中.这是我似乎无法让它工作的地方.当我执行console.log(结果)时,它将记录未定义.有任何想法吗?

编辑:所以我现在把光纤和条带键作为全局变量,并没有得到错误,但返回似乎没有返回任何值.所以在客户端我有:

'click #signupsubmit': function (event) {
    console.log("hello");
    var whatis = getVal(); // function gets value of forms and returns object
    var testid;
    var cusid = Meteor.call('usersignup', whatis.email, function (error, result) {
        if (error) {
            console.log(err.message);
            return;
        }
        console.log(result);
        console.log("meteor call");
        testid = result;
        return (result);
    });
    console.log("outside call");
    console.log(testid);
    console.log(cusid);
    },
});
Run Code Online (Sandbox Code Playgroud)

所以我一直在运行一些console.log测试,它似乎执行meteor.call并继续下线.testid和cusid的Console.log都返回undefined但几秒钟之后我收到了console.log结果和meteor.call里面的字符串"meteor call".有没有办法等待流星调用完成然后运行我的点击功能中的其余部分?所以控制台输出会像:

  • "你好"
  • "外面的电话"
  • 测试ID未定义
  • cusid undefined
  • "流星呼唤"
  • "结果"

Aks*_*hat 9

请记住,条带API不使用Fibers.你需要手动把它.回调没有到达客户端,因为到那时它已经有了响应(它的异步)

在将结果返回给客户端之前,您可以使用类似的东西等待条带回调的结果:

var stripe = StripeAPI('mykeygoeshere');  // secret stripe API key
var Future = Npm.require('fibers/future');

var fut = new Future();

stripe.customers.create(
    { email: 'hello@example.org' },
    function(err, customer) {
        if (err) {
            console.log(err.message);
            fut.ret;
        }
        fut.ret("customer id", customer.id);
    }
);
return fut.wait();
Run Code Online (Sandbox Code Playgroud)

这里Future使用了a,它等待在将结果返回给客户端之前从条带回调接收结果.

更多信息可以在Fibers/Futures&Synchronous Callbacks上找到,包括如何使用它们以及何时使用它们:

  1. Meteor:在Meteor.method中调用异步函数并返回结果
  2. https://github.com/laverdet/node-fibers
  3. https://gist.github.com/possibilities/3443021