javascript - Meteor.call 未返回响应

标签 javascript meteor

我正在尝试让 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/

相关文章:

javascript - 学生平均水平 - JavaScript 无响应

meteor :资源被解释为图像但使用 MIME 类型 text/html 传输

javascript - Meteor:错误:ENOTEMPTY:部署到 Modulus 时目录不为空

javascript - meteor 按钮上的切换图标

javascript - 警报 javascript 中的换行符

javascript - 如何将小数四舍五入到最接近的分数?

javascript - 如何纯粹使用 AJAX 实现动态过滤并仍然保留可用的历史记录?

javascript - JQuery源代码中的 'module'和 'define'是什么?

meteor - 什么时候使用 meteor 方法与普通功能?

javascript - Meteor-AutoForm:如何根据另一个控件更新选择选项