Como sincronizar objetos do Promise?

Eu prometo objetos que precisam funcionar sincronizados. Por exemplo, a segunda promessa não deve funcionar antes da primeira. Se o primeiro rejeitar, o primeiro deverá ser executado novamente.

Eu implementei alguns exemplos.Este funciona bem. chame getVal, aguarde 2000ms, retorne i ++, chame novamente getVal .....

 getVal() {
       return new Promise(function(resolve, reject) {
      setTimeout(function(){ resolve(19) }, 2000);
         });

     }

async promiseController(){

    for(var i =0;i<5;i++)
      {
        var _val = await this.getVal()
        console.log(_val+'prom');
      }
    }

Mas preciso controlar uma variedade de objetos promissores. O que eu quero fazer é ter dados e dividi-os em 5 partes. Depois que a primeira parte é processada (por exemplo: enviada ao servidor), bem, eu quero processar a segunda parte, caso contrário, tenho que processar a primeira parte novamente.

Esta é a implementação do protótipo que fiz

  getVal() {
   return new Promise(function(resolve, reject) {
  setTimeout(function(){ resolve(19) }, 2000);
     });

 }

async promiseController(){
  var proms=[]
  for(var i =0;i<5;i++)
    {
      proms.push(this.getVal())
    }

for(var i =0;i<5;i++)
  {
    var _val = await proms[i]
    console.log(_val+'prom');
  }
}

Promete que os objetos neste código funcionam sequencialmente. Como posso corrigir o código abaixo para que ele funcione síncrona como primeiro exemplo.

questionAnswers(4)

yourAnswerToTheQuestion