Estoy trabajando en angular y nuevo en la codificación, el problema al que me enfrento es que estoy obteniendo datos de una WebAPI de terceros y la salida que estoy tratando de guardar en una matriz, pero la salida se almacena pero no puedo llamar a datos particulares de formación.
aquí está mi código a continuación, necesito todo su amable apoyo
MI CÓDIGO
import { Component, OnInit } from '@angular/core'; import { SharedService } from 'src/app/shared.service'; @Component({ selector: 'app-taglist', templateUrl: './taglist.component.html', styleUrls: ['./taglist.component.css'] }) export class TAGLISTComponent implements OnInit { constructor(private service : SharedService) { } Taglist:any=[]; TagStore:any=[]; FinalData:any=[]; ngOnInit(): void { this.refreshTagslist(); } refreshTagslist(){ this.service.gettaglist().subscribe(data=>{ this.Taglist = data; //console.log(this.Taglist); for(var i = 0; i < this.Taglist.Items.length;i++) { this.service.PITagValue= this.Taglist.Items[i].Links.Value; this.service.gettagValue().subscribe(data=>{ this.TagStore = data;/* THE JSON RESPONE MENTION*/ this.FinalData.push(this.TagStore.Value); }) } console.log(this.FinalData) console.log(this.FinalData[1]); //console.log(this.Taglist.Items[0].Name); }) } }RESPUESTA JSON
{ "Timestamp": "2022-01-12T12:15:37Z", "Value": 1.0, "UnitsAbbreviation": "", "Good": true, "Questionable": false, "Substituted": false, "Annotated": false }la salida que estoy obteniendo
Si this.service.gettagValue() devuelve un observable asíncrono, entonces las declaraciones de console.log que registran this.FinalData y this.FinalData[1] se ejecutarán antes de la ejecución de las siguientes líneas.
this.TagStore = data;/* THE JSON RESPONE MENTION*/ this.FinalData.push(this.TagStore.Value); Las siguientes declaraciones de registro se ejecutarán antes de que los datos se inserten en this.FinalData
console.log(this.FinalData); // here this.FinalData would be [] console.log(this.FinalData[1]); // Trying to access 1st element from empty array will result in undefinedPuede ver los datos dentro de la consola de Chrome, porque el valor se evalúa en la primera expansión. Pruebe a continuación la declaración de la consola, y verá una matriz vacía impresa:
console.log(JSON.stringify(this.FinalData)); // instead of console.log(this.FinalData)También le recomendaría explorar el operador forkJoin RxJS y ver si sería útil para su caso de uso. El operador básicamente espera a que se completen todos los Observables y luego combina el resultado.