Stripe Charge 承诺没有解决

Stripe Charge promise doesn't resolve

我正在从 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 调用超时,因为它没有收到响应数据。

我想我看这个太久了,可能犯了一个非常简单和愚蠢的错误。

在评论中@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,这样请求才能看到。