1
resposta

Duvida na execução de funções no pipe

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();
1 resposta

Boa tarde.

No curso, eu mostro que quando há código assíncrono com callback você deve inverter a ordem dos parâmetros.

https://cursos.alura.com.br/course/javascript-padroes-abordagem-funcional/task/35186

Não há outra forma, a não ser que você crie uma função específica e inverta os parâmetros para ser usada nessa situação.