Hercles Posted May 14, 2022 at 10:34 PM Report Share #625939 Posted May 14, 2022 at 10:34 PM Caros, alguém pode me ajudar? Eu queria que o método abaixo funcionasse… Porém o retorno é vazio, embora no console.log dentro do subscribe vem o array do banco. Dentro do for a variavel this.qdDias vem com o valor e a lista também… mas fora de la, parece que é destruida. obterParametroPrazoMap(nomePrazo: string) : any { this.service.obterParametrosgeraisMap().pipe(take(1)).subscribe( data => { this.listParametrosGerais = data.data; this.listParametrosGerais.forEach(x => (this.listParametrosGerais, x) ) for (var i = 0; i < this.listParametrosGerais.length; i++) { if (this.listParametrosGerais[i].chavePrimaria.tipoParametro.nomeTipoParametro === nomePrazo) { this.qdDias = this.listParametrosGerais[i].quantidadeDiasPrazo; \\ está com o valor this.qdDias console.log("Resultado dentro do for: ", this.qdDias) break } } } ); // fica sem valor this.qdDias console.log("resultado do retorno: " , this.qdDias) return this.qdDias; } Alguém sabe como resolve ? Link to comment Share on other sites More sharing options...
antseq Posted May 15, 2022 at 01:44 PM Report Share #625940 Posted May 15, 2022 at 01:44 PM 14 horas atrás, Hercles disse: Caros, alguém pode me ajudar? Eu queria que o método abaixo funcionasse… Porém o retorno é vazio, embora no console.log dentro do subscribe vem o array do banco. Dentro do for a variavel this.qdDias vem com o valor e a lista também… mas fora de la, parece que é destruida. Alguém sabe como resolve ? de forma simples: - A - o código da sua função tem um "subscribe" porque é algo assíncrono que não sabe quando terá a resposta (não é imediata). - B - devido a A (assíncrono), a sua função nunca poderia responder sincronamente "return this.qdDias" porque o código passa directamente para esta linha enquanto o código (A) anterior ainda está a correr em background e só quando tiver a resposta é que acionará o respectivo subscribe. Por isso o seu "return this.qdDias" está vazio (resposta imediata, síncrona) e o outro dentro do "subscribe" está sempre certo (não imediato, assíncrono). das duas uma: ou usas directamente código (interno) desta função que tem um "subscribe" onde precisas do valor... e só depois de obteres o resultado é que segues o percurso normal. ou nesta função, voltas a devolver um "observable" que será consumido onde precisas do valor por um "subscribe"... e só depois de obteres o resultado é que segues o percurso normal. cps, 2 Report Link to comment Share on other sites More sharing options...
Hercles Posted May 17, 2022 at 12:28 AM Author Report Share #625944 Posted May 17, 2022 at 12:28 AM Resolvi com Promise. Promise.resolve(2); Promise.all([ this.service.obterParametrosgeraisMap() .then((lista: any) => { this.listParametrosGerais = lista.data; }) , this.service.obterParametrosEspecificosMap() .then((lista: any) => { this.listParametrosEspecifico = lista.data; }) ]).then(() => { this.iniciarVariaveisDicionario(); }); Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now