Home > Software engineering >  Why the subscribe function does not populate my property?
Why the subscribe function does not populate my property?

Time:09-03

I have a problem here, i want to populate my property with the data that i get from the backend, but i dont know why my subscribe function does not populate it, check my code:

Here is my app.component.ts code:

export class AppComponent implements OnInit {
  schedulings: Scheduling[] = [];

  constructor(private schedulingService: SchedulingService) {
    this.getSchedulings();
  }

  ngOnInit(): void {
    console.log(this.schedulings);
  }

  getSchedulings(): void {
    this.schedulingService.getSchedulings()
      .subscribe((s) => (this.schedulings = s));
  }
}

And here is my scheduling.service.ts code:

export class SchedulingService {
  private readonly apiUrl = "http://localhost:8080/schedulings";
  
  constructor(private http: HttpClient) { }
  
  getSchedulings(): Observable<Scheduling[]> {
    return this.http.get<Scheduling[]>(this.apiUrl);
  }

}

The way the code is now the console.log function returns a empty list, but when i use a .pipe function with tap(console.log) it print all the schedulings on the console, so the angular gets the data from the backend without errors, but i want to populate the property schedulings with all the data. I know this is a basic and dumb question but i'll be glad if someone can help me.

CodePudding user response:

HTTP requests are asynchronous and take time to complete, if you want code to execute after the request completes, put the code in the subscribe callback.

  getSchedulings(): void {
    this.schedulingService.getSchedulings()
      .subscribe((s) => {
        this.schedulings = s;
        console.log(this.schedulings);
        this.doMoreStuff();
      });
  }
  • Related