条纹费用承诺无法解决

时间:2016-08-12 13:15:21

标签: javascript ajax promise stripe-payments

我正在StripeCheckout.configure({ })参数token进行AJAX调用,如下所示:

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)
  })
}

从评论中可以看出,charge函数中的data是正确的,但是在该promise与原始AJAX调用之间,它丢失了,AJAX调用什么都没有。如果我查看Chrome devtools中的网络请求,则表示charge收到了数据,但AJAX调用超时,因为它没有收到响应数据。

我想我已经看了太长时间,并且可能犯了一个非常容易和愚蠢的错误。

1 个答案:

答案 0 :(得分:1)

在评论中借助@Bergi帮助解决这个问题(感谢Bergi!)。

以下代码对我有用,将promise的更新发送回原始的Ajax请求:

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

原因主要是,AJAX请求正在访问页面(在我的情况下为/charge),正在进行获取数据的工作,但返回它什么也没做,就像在前面一样 - 结束应用程序,除非你正在做一些事情(分配给变量,用该数据运行另一个函数等),它将会丢失。它需要以JSON格式输出到页面,因此请求可以看到它。