2016-08-12 86 views
0

我在token参数进行AJAX调用从StripeCheckout.configure({ }),像这样:条纹充电承诺不能解决

StripeCheckout.configure({ 
    ..., 
    token: function(stripeToken) { 
    $.post(url, { 
     // post data 
    }, function(data) { 
     console.log("data", data); 
     return data; 
    }); 
    } 
}); 

在接收AJAX调用的URL(我们称之为/charge),我有这样的代码:

const charge = (req, res) => { 
    const { 
    // get AJAX post data, e.g amount, description, STRIPE_TOKEN, etc 
    } = req.body 
    return stripe.charges.create({ 
    amount: amount, 
    currency: 'gbp', 
    source: STRIPE_TOKEN, 
    description: description, 
    }) 
    .then((charge) => { 
    const {params} = charge // get various parameters from the successful charge data to be passed into book() 
    return book(params) // promise function which goes to an external provider 
    .then((data) => { 
     return data // data returns from book and is then lost between here and the original AJAX callback 
    }) 
    }).catch((err) => { 
    console.log(err) 
    }) 
} 

,你可以从注释中看到,在充电功能的data是正确的,但后来这一承诺和原来的AJAX调用之间,它失去了和AJAX调用将一无所获。如果我查看Chrome devtools中的网络请求,它会说charge收到数据,但由于AJAX呼叫未收到响应数据,因此超时。

我想我一直在寻找这个太长时间,并可能犯了一个超级简单而愚蠢的错误。

+0

a)您不''从'then'回调''返回'book(...)'承诺b)您在哪里写回应? – Bergi

+0

嗨@Bergi,谢谢我添加了返回英寸我也意识到我忘了添加一个'console.log'到AJAX调用来写入返回的数据(在我的代码中,但没有在这里)。然而,有了这两个补充,它仍然没有返回任何东西:( –

+0

'console.log'写入控制台,而不是HTTP响应。您可能需要类似'res.json(data)'(但我不知道Stripe API) – Bergi

回答

1

在@Bergi的帮助下发表了评论(感谢Bergi!)。

这里是为我工作的,发送自许的更新回原来的Ajax请求的代码:

const charge = (req, res) => { 
    // rest of the promise 
    .then((data) => { 
     res.json(data) 
    }) 
    }).catch((err) => { 
    console.log(err) 
    }) 
} 

这样做的原因基本上是,AJAX请求被击中的页面(/charge我的情况),开展工作来获取数据,但返回它不做任何事情,就像在前端应用程序中一样,除非您正在使用它(分配给变量,使用该数据运行另一个函数等)。 ),它会丢失。它需要以JSON格式输出到页面,以便请求可以看到它。