¿Cómo sincronizar objetos de promesa?

Tengo objetos de promesa que necesitan trabajar sincronizados. Por ejemplo, la segunda promesa no debería funcionar antes de que se complete la primera. Si el primero rechaza, primero debe ejecutarse nuevamente.

He implementado algunos ejemplos. Este funciona bien. llame a getVal, espere 2000 ms, vuelva, i ++, vuelva a llamar a 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');
      }
    }

Pero necesito controlar una serie de objetos de promesa. Lo que quiero hacer es tener datos y dividirlos en 5 partes. Después de que se procesa la primera parte (por ejemplo: enviado al servidor) bien, quiero procesar la segunda parte, de lo contrario tengo que procesar la primera parte nuevamente.

Esta es la implementación del prototipo que hice

  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');
  }
}

Las promesas de objetos en este código funcionan secuencialmente. ¿Cómo puedo arreglar el siguiente código para que funcione sincrónicamente como primer ejemplo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta