1
resposta

Comentando o processo, seria assim?

Estou tentando abstrair tudo que o Angular faz por debaixo dos panos nesse processo de criação do validador assíncro e queria expor meu entendimento

Validadores assíncros não retornam um objeto muito menos null. Os mesmos retornam um Observable onde o sistema de validação do Angular conseguem se inscreverem nestes Observables e pegar sua emissão.

Comentando o código

    //retornará uma função de validação
    checkUserNameTaken() {
       return (control: FormControl) => {
           return control.valueChanges //Observable que emite o valor do input
            .pipe(debounceTime(300)) //Ignorar as emições do Observable que ocorram em menos 300ms de intervalo entre uma emissão e outra

             /*
                     Após os 300ms, pegue a última emissão do Observable e receba como parâmetro
                    do operador switchMap. A partir disso crie e retorne um novo Observable
             */
            .pipe(switchMap(userName => this.signUpService.checkUserNameTaken(userName)))

           /*
                   Receba como parâmetro a emissão do Observable retornado pelo switchMap
                A partir disso, pegue a emissão e retorne mais um Observable,
                no caso dos tipo Observable<null> ou Observable<object>
           */
            .pipe(map(isTaken => isTaken ? { userNameTaken: true } : null))

            /*
                    Forçar o Observable a completar após a primeira emissão.
                    Já que caso não seja feita isso, o sistema de validação do Angular
                    irá realizar o subscribe() entretanto não irá consumir o valor da emissão e
                    ficará escutando eternamente.
            */
            .pipe(first());
       } 
    }

Estou correto? Quem puder, por favor contribuir para meu entedimento, agradeço. Fica também aqui como forma de ajuda para quem está com duvidas.

1 resposta

Olá, Thiago!

Isso mesmo, excelente método de fixação. Observables podem confundir pelo encadeamento criado ao se trabalhar com eles, e essa metodologia vai facilitar a sua compreensão do passo a passo.

E realmente, vai ajudar quem estiver com dúvidas!

Obrigado e bons estudos!