Question: How to chain getNextPaymentPayload/makePayment/confirmPayment into a loop? You always can check if any payments remains with hasAnyPayments method.
Problem: You can't do payments in parallel. To make a payment you need to wait while the previous one will be completed.
Example:
SomeService
    //first payment
    .getNextPaymentPayload()
    .then(paymentPayload => this.makePayment(paymentPayload))
    .then(paymentResponse => this.confirmPayment)
    //second payment        
    .then(SomeService.getNextPaymentPayload())
    .then(paymentPayload => this.makePayment(paymentPayload))
    .then(paymentResponse => this.confirmPayment)
    //so on...
 
    