3
respostas

THEN ARRAY VAZIO PROMISSE

Criei um método para buscar o tempo no firestore, por meio da chamada da promisse, mas o array vem vazio inicialmente porque a promisse ainda não foi resolvida. como solucionar para chamar o array apenas quando a chamada getTime() terminar.

exemplo.service.ts

teste: [];

getTime() {
    this.userCollection.ref.get()
      .then(res => {
        if (res.docs.length == 0) {
          alert('Não existem marcacoes até o momento por favor aguarde')
        } else {
          res.forEach(ponto => {
            console.log(ponto.id);
            console.log(ponto.data().time.seconds * 1000);
            this.time.push(new Date((ponto.data().time.seconds * 1000)));
          })
        }
      }).catch(err => {
        console.log(err);
      })
  }
exemplo.component.ts

ngOnInit() {
    this.mainService.getTime();
    console.log(this.mainService.time);
  }
3 respostas

Olá, Gustavo! Tudo bom?

Você pode colocar a sua ação dentro da promise, por exemplo:

ngOnInit() {
    this.mainService.getTime()
    .then(
        console.log(this.mainService.time);    
    );
  }

Espero ter ajudado! Abraços

Opa, Gustavo! Como vai?

A dica da Juliana está correta! Contudo, eu gostaria de fazer um pequeno, mas importante adendo! Não é boa prática utilizar Promise dentro de um projeto Angular uma vez que esse framework já dá uma ferramenta para resolver questões de assincronicidade: o RxJS!

Sendo assim, o ideal é sempre transformar suas promises para observables do RxJS que trazem vários benefícios como os mostrados durante os cursos de Angular do mestre Flávio!

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Obrigado pela dica Juliana, mas pra mim não funcionou, acho que é porque eu deveria ter retornado uma promisse resolve reject na função get time, como eu transformaria essa promisse em um observable ou então eu resolveria isso? Podem me ajudar com exemplos de códigos?