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

Entendendo o código passo a passo.

Olá professores, estou buscando entender melhor o código dessa aula que está muito confuso.

Vamos ao que eu quero destrinchar linha por linha:

checkUserNameTaken() {

    return (control: AbstractControl) => {
        return control
            .valueChanges
            .pipe(debounceTime(300))
            .pipe(switchMap(userName =>
            this.signUpService.checkUserNameTaken(userName)
        ))
            .pipe(map(isTaken => isTaken ? { userNameTaken: true } : null))
            .pipe(first());
    }
}

Não entendi esse Abstract Control. O debounceTime é talvez uma das poucas coisas que ficaram 100% claras no código.

Não entendi sobretudo a parte da explicação:

"Utilizamos o switchMap() pois primeiro pegamos a emissão do Observable, após o qual temos que retornar a emissão do Observable de checkUserNameTaken(). Para não obtermos as duas emissões concomitantemente, exigiremos que o fluxo anterior seja pausado e trocado para o fluxo de verificação do username. Este processo é repetido toda vez que é feita uma nova digitação no campo de input."

E qual é a diferença do map pro switchMap? Ambos não alteraram o fluxo do código? Desculpe se pareci muito ignorante.

6 respostas
solução!

Fala ai Mauricio, tudo bem? Vamos lá:

Não entendi esse Abstract Control

É a classe base para lidar com campos em formulários através do ReactiveForms, nesse caso estamos dizendo que o parâmetro para a função será um campo de formulário.

Isso porque as classes FormControl, FormGroup e FormArray herdam de AbstractControl.

E qual é a diferença do map pro switchMap? Ambos não alteraram o fluxo do código? Desculpe se pareci muito ignorante.

A diferença é que o map altera o Observable atual, emitindo um novo valor para o mesmo, já o switchMap cria um novo Observable com um novo valor.

Espero ter ajudado.

Faltou explicar o código linha a linha e explicar esse trecho:

"Utilizamos o switchMap() pois primeiro pegamos a emissão do Observable, após o qual temos que retornar a emissão do Observable de checkUserNameTaken(). Para não obtermos as duas emissões concomitantemente, exigiremos que o fluxo anterior seja pausado e trocado para o fluxo de verificação do username. Este processo é repetido toda vez que é feita uma nova digitação no campo de input."

"A diferença é que o map altera o Observable atual, emitindo um novo valor para o mesmo, já o switchMap cria um novo Observable com um novo valor."

Não era para ser o contrário?

Fala ai Mauricio, vamos lá:

Não era para ser o contrário?

Não, o map vai alterar o Observable atual, o switchMap vai trocar, ele vai gerar um novo Observable por isso é chamado de switch.

"Utilizamos o switchMap() pois primeiro pegamos a emissão do Observable, após o qual temos que retornar a emissão do Observable de checkUserNameTaken(). Para não obtermos as duas emissões concomitantemente, exigiremos que o fluxo anterior seja pausado e trocado para o fluxo de verificação do username. Este processo é repetido toda vez que é feita uma nova digitação no campo de input."

A resposta anterior resolve essa, como a gente vai criar um novo Observable com um novo valor, não vai haver mais de um valor para o Observable atual com o map.

Espero ter ajudado.

Obrigado pelas respostas.

Magina Mauricio, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.