我正在尝试使用Stripe API和Promises向许多卡收费。
如果收费成功,退款将发给其他客户。
收费金额取决于将要退款的机票价格。
某些收费会失败(客户的信用卡上没有足够的钱等),因此我需要等待下一次收费(承诺)是否成功,然后再转到下一个收费(承诺)。
我希望通过使用.then()中的拼接(如果成功)来确保使用正确的退款来计算费用,如果失败则不使用。
最后,我打算在使用代码完成所有费用后调用其他功能:
i===waitListToCharge.length-1
作为条件。
代码正在运行,但是promise似乎在之前的promise之前就已触发,并且条件在所有promise尚未完成之前就已触发-将错误发布到我的数据库中。我不明白为什么。
我最初尝试在while循环中使用一个promise,但是那也不起作用。代码大纲为here
解决此问题的最佳方法是什么?
let refundsCopy = ticketsToRefund.map(e => e)
waitListToCharge.forEach((e,i) => {
**code to calculate correct price and charges
let ChargeCard = stripe.paymentIntents.create({
***code to execute charge on stripe api
})
Promise.allSettled([ChargeCard])
.then(data => {
//if successful
if(data[0].status === 'fulfilled'){
successfulPayments.push(data[0])
refundsCopy.splice(0,e.quantity)
}else {
console.log('payment failed')
failedPayments.push(data[0])
}
if(i===waitListToCharge.length-1){
callOtherFunctions(successfulPayments,failedPayments,eventData,ticketsToRefund)
}
})
})