Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Compose x .then()

Ola Professor, tudo bem?

Neste exercício vimos como utilizar um compose para conseguirmos que não passagem de parâmetros entre as funções(Point-free style).

Antes de assistir a aula havia feito dessa maneira:

const getItensFromNotas = notas => notas.$flatMap(nota => nota.itens);
const filterItensByCode = (code,itens) => itens.filter((item)=> item.codigo == code);
const sumItensValue = itens => itens.reduce((total,item) => total + item.valor,0);

export const notaService = {
    listAll(){
        return fetch(API).then(handleStatus)
    },
    sumItens(code){
       const filterItems = partialaze(filterItensByCode,code);
       return this.listAll()
                        .then(getItensFromNotas)
                        .then(filterItems)
                        .then(sumItensValue);
    }
}

Só queria saber se existe alguma vantagem em usar o compose ao encadeamento dos .then que aprendi nas outras aulas?

Desde de já agradeço ;)

3 respostas
solução!

Oi Allan! Não tem nada errado no seu código. A questão é o paradigma. Nesse exemplo não há composição de funções, ou seja, foge um pouco do paradigma funcional. Mas há também um pequeno detalhe que talvez você não tenha percebido. Vou lhe explicar.

Cada then cria uma nova Promise. Usando composição você não cria Promises novas. Seu código:

  sumItens(code){
       const filterItems = partialaze(filterItensByCode,code);
       return this.listAll()
                        // 3 Promises extras 
                        .then(getItensFromNotas)
                        .then(filterItems)
                        .then(sumItensValue);
    }

Com compose:

const sumItems = compose(
            sumItemsValue, 
            partialize(filterItemsByCode, code), 
            getItemsFromNotas
        );
        // cria apenas 1 nova promise
        return this.listAll().then(sumItems);

Pegou a ideia ? Além disso fica mais clara a intenção do código com a função sumItems. Estou aqui para tirar suas dúvidas, qualquer coisa grita.

Tudo certo Allan?

kkkkkk pode deixa professor, gritarei ;)

Agora eu entendi a vantagem do compose professor, muito obrigado =D