Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

192
Visualizações
observable indefinido en arquitectura de fachada con rxjs

(Siguiendo la sugerencia de gunnar, estoy editando mi pregunta) @Gunnar.B

Servicio para conexión con api

 @Injectable({ providedIn: 'root' }) export class ConsolidadoApi { constructor(private http: HttpClient) { } getInvestiments(search?: any): Observable<any> { return this.http.get<any>(`${environment.basePosicaoConsolidada}`); } }

Este servicio (capa) expone los flujos de estado y la interfaz para los componentes en la capa de presentación (componente)

 @Injectable({ providedIn: 'root' }) export class CoreService { constructor(private api: ConsolidadoApi, private state: StateService) { } public getInvestments$(): Observable<any> { return this.state.getInvestiments$() } public loadInvestments() { return this.api.getInvestiments() .pipe( tap(investPortifolio => this.state.setInvestments(investPortifolio)) ); } }

Este servicio es responsable de la lógica que irá al componente.

 @Injectable({ providedIn: 'root' }) export class StateService { private investments$ = new BehaviorSubject<any>(null); public getInvestiments$() { return this.investments$.asObservable() } public setInvestments(investPortifolio){ this.investments$.next(investPortifolio) } }

Sin embargo en mi html no aparecen los datos provenientes de la api.

menu.component.ts

 export class MenuComponent implements OnInit { investments$: Observable<any>; constructor( private coreService : CoreService ) { this.investments$ = this.coreService.getInvestments$() } ngOnInit(): void { this.coreService.loadInvestments(); console.log(this.coreService.loadInvestments()) } }

menú.componente.html

 <div> test </div> <div *ngFor="let investimentPortifolio of investments$ | async;"> {{investimentPortifolio | json}} </div>

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El método listInvestments está realizando una llamada a la API asíncrona. Entonces, básicamente, la propiedad de inversión aún no está definida cuando llamó a cada uno.

Desea realizar un bucle en la matriz de inversiones después de cargar datos desde el servidor, no antes.

Una forma de hacerlo es asegurarse de que está dentro de la devolución de llamada next() de subscribe y allí está seguro de que tiene los datos que necesita para realizar su acción.

La clase CoreService se convierte en:

 @Injectable({ providedIn: 'root' }) export class CoreService { public investments: any; constructor(private api: ConsolidadoApi, private state: StateService) {} public createMenu(){ this.api.getInvestments() .subscribe(response => { this.investments = response; this.investments.forEach(element => { console.log(element) }); }) } }

Actualización sobre la edición de preguntas

En ngOnInit llamaste a loadInvestments() que devuelve un observable. Y los observables son perezosos, eso significa que si no llamaste para suscribirte, no pasará nada.

Lo que tienes que hacer es cambiar esta línea:

 this.coreService.loadInvestments();

a

 this.coreService.loadInvestments().subscribe();
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda