在asyn / await函数上未获取返回值

时间:2018-09-09 06:14:46

标签: node.js async-await stripe-payments

以前使用try and catch方法的功能

const chargeCard = async (
  stripeToken,
  amount,
  currency,
  phoneNumber,
  animalName,
  numberOfHorses
) => {
  try {
    let charge;
    charge = await to(
      stripe.charges.create({
        amount: amount.replace('.', ''),
        currency: currency,
        description: `Charge from ${phoneNumber} for ${animalName}`,
        source: stripeToken,
        metadata: {
          phoneNumber,
          animalName,
          numberOfHorses
        }
      })
    );
    return charge;
  } catch (error) {
    console.log(error);
    logger.error(error);
    return error;
  }
};

但是现在我想出了正确的方法来获取错误,我需要在函数

中添加回调并承诺
var result = stripe.charges.create({
 ...data...
}, function (err, charge) { // <-- callback
 ...
}).then(function(charge) { // <-- promise
 ...
})

具有以下功能

const chargeCard = async (
  stripeToken,
  amount,
  currency,
  phoneNumber,
  animalName,
  numberOfHorses
) => {

  try {
    const charge = await
    stripe.charges.create({
      amount: amount.replace('.', ''),
      currency: currency,
      description: `Charge from ${phoneNumber} for ${animalName}`,
      source: stripeToken,
      metadata: {
        phoneNumber,
        animalName,
        numberOfHorses
      }
    }, (error, charge) => {
      console.log(error);
      return error;
    }).then(charge => charge);
    // return charge;
  } catch (error) {
    console.log(error);
    logger.error(error);
    return error;
  }
}

当我登录控制台时,它会收到所有错误,但不会通过调用此chargeCard函数返回错误。 任何帮助将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以试试吗?它应该工作

EventPageIndex

答案 1 :(得分:0)

这是我创建服务的方式:

  let paymentResult = undefined

  try {
    paymentResult = await stripe.charges.create({
      amount: defaultAmount,
      currency,
      source: paymentInfo.id,
    })
  } catch (error) {
    logger.error(`Payment error: \nHEADER:${JSON.stringify(requestHeader)} \nSTRIPE ERROR:${JSON.stringify(error)}`)
    paymentResult = { error: error.type }
  }

  return paymentResult

您可以看到不需要回调,因为仅使用async / await和try / catch结构即可返回成功有效载荷或错误。