Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Pilha de observable - Boas praticas?

Qual a melhor pratica para escrever esse código? Sendo que sempre que preciso aguardar o retorno de um outro observable.

funcExemple(){
    this.Service.exemple01().subscribe(r => {
        //Primeira chamada
        console.log(r)
        let jsonExemple1 = {
            exemplo1: '1',
            exemplo2: '2',
            exemplo3: '3'
        }

this.pesquisaRotasService.exemple02(jsonExemple1).subscribe(r => {
            let jsonExemple2 = {
                exemplo1: '1',
                exemplo2: '2',
                exemplo3: '3'
            }

            this.Service.exemple03(jsonExemple2).subscribe(r => {
                let jsonExemple3 = {
                    exemplo1: '1',
                    exemplo2: '2',
                    exemplo3: '3'
                }
                this.Service.exemple03(jsonExemple3).subscribe(r => {
                    console.log(r)
                    //FINAL
                })
            })
        })
    })



}
1 resposta
solução!

Oi Kleber, tudo bem?

Desculpe a demora em retornar.

Para melhorar a legibilidade e a manutenção do seu código, uma boa prática é utilizar o operador switchMap() para fazer a concatenação dos observables. Dessa forma, você evita o aninhamento excessivo de subscribes, tornando o código mais limpo e fácil de entender.

Segue um exemplo de como ficaria o seu código utilizando o switchMap():

funcExemple(){
  this.Service.exemple01().pipe(
    switchMap((r1) => {
      console.log(r1);
      let jsonExemple1 = {
        exemplo1: '1',
        exemplo2: '2',
        exemplo3: '3'
      };
      return this.pesquisaRotasService.exemple02(jsonExemple1);
    }),
    switchMap((r2) => {
      let jsonExemple2 = {
        exemplo1: '1',
        exemplo2: '2',
        exemplo3: '3'
      };
      return this.Service.exemple03(jsonExemple2);
    }),
    switchMap((r3) => {
      let jsonExemple3 = {
        exemplo1: '1',
        exemplo2: '2',
        exemplo3: '3'
      };
      return this.Service.exemple03(jsonExemple3);
    })
  ).subscribe((finalResult) => {
    console.log(finalResult);
    //FINAL
  });
}

Espero ter ajudado.

Um abraço e bons estudos.