Функция, ранее использовавшая метод 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.info(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.info(error);
return error;
}).then(charge => charge);
// return charge;
} catch (error) {
console.info(error);
logger.error(error);
return error;
}
}
он получает все ошибки, когда я вхожу в консоль, но не возвращает ошибки, вызывая эту функцию chargeCard. Любая помощь могла бы быть полезна.
Спасибо
Пожалуйста, проверьте еще раз, я обновил код.
Обычно, если функция принимает обратный вызов, она не возвращает обещание. Существуют API, которые предоставляют оба метода, но обычно, если существует обратный вызов, обещание не возвращается. Так что либо .create(options, (err, result) => {})
, либо .create(options).then(result=>{}).catch(err=>{})
Позвольте мне попробовать это
Он по-прежнему ничего не возвращает, показывая только undefined.
Вы можете это попробовать? он должен работать
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.info(error);
logger.error(error);
return error;
}
}
вот как я создал свой сервис:
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.
Это выглядит немного странно, действительно ли
.create
возвращаетPromise
а также принимает обратный вызов?