Fiz o teste abaixo e ele retorna o valor do teste3, depois o teste2 e por fim o teste1, queria saber se tem como fazer ele executar na ordem que coloquei no pipe?
const pipe = (...fn) => value => fn.reduce( (nextValue, fn) => fn(nextValue), value);
const teste1 = (valor1) => {
    try {    
      setTimeout(() => {      
        console.log('Time out 1');      
        return valor1;    }
        , 8000);  
      } catch (error) {
          throw new Error('Erro 1');  
      }
  }
const teste2 = (valor1) => {  
    try {    
      setTimeout(() => {      
        console.log('Time out 2');      
        return valor1;    
      }, 5000);  
    } catch (error) {    
      throw new Error('Erro 2');  
    }
  }
const teste3 = (valor1) => {  
    try {    
      setTimeout(() => {      
        console.log('Time out 3');      
        return valor1;    
      }, 3000);  
    } catch (error) {    
      throw new Error('Erro 3');  
    }
  }
async function init() {  
  console.log('Iniciando Processamento');  
  const enviar = pipe(    teste1,    teste2,    teste3  )  
  enviar({ arroz: 'abc' });
}
init(); 
            