Koa 和 Stripe,等待渲染页面

Koa and Stripe, wait to render page

我正在使用 koa 和 stripe 处理一次性付款。它正常工作,但是它在分配 data 之前呈现页面。我希望能够在分配数据后呈现页面,以便 id 将显示在页面视图中而不是未定义。

我尝试在回调函数中渲染页面,我得到了 404 not found。我尝试在 stripe.charges.create 函数之后使用 .then,因为 stripe 与 promises 兼容,但它给出了相同的结果。我的当前代码如下。

    module.exports.payment = function* payment()
    {
        const params = this.request.body;
        let data;

        if (!params.stripeToken) {
            this.throw(400, "Sorry, something has gone awry.");
        }
        if (!params.amount) {
            this.throw(400, "A purchase amount must be supplied.");
        }
        const chargeAmount = params.amount * 100;

        const charge = stripe.charges.create({
            amount: chargeAmount,
            currency: "USD",
            source: params.stripeToken,
            description: `${config.site.name} order#: ${this.session.id}`
        }, (err, charge) => {
            data = charge.id;
        }

);

    yield this.render("payment/payment_success", {
        id: data
    });
};

如果 stripe 库支持 promises,你最好的选择可能是 yield stripe.charges.create

module.exports.payment = function* payment()
{
    const params = this.request.body;

    if (!params.stripeToken) {
        this.throw(400, "Sorry, something has gone awry.");
    }
    if (!params.amount) {
        this.throw(400, "A purchase amount must be supplied.");
    }
    const chargeAmount = params.amount * 100;

    const charge = yield stripe.charges.create({
        amount: chargeAmount,
        currency: "USD",
        source: params.stripeToken,
        description: `${config.site.name} order#: ${this.session.id}`
    };

    yield this.render("payment/payment_success", {
        id: charge.id
    });
};

现在,当您呈现视图时,charge 将填充条纹调用的结果。