Не получается Возвращаемое значение для функции asyn / await - PullRequest
0 голосов
/ 09 сентября 2018

Функция, ранее использовавшая метод try и 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 голосов
/ 15 мая 2019

Вот как я создал свой сервис:

  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.

0 голосов
/ 09 сентября 2018

Можете ли вы попробовать это? это должно работать

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
      }
    });
    return charge;
  } catch (error) {
    console.log(error);
    logger.error(error);
    return error;
  }
}
...