I want to utilize the data from API instead of just printing it out. By using code snippets below, I can show the output from API in console.
(4) [{…}, {…}, {…}, {…}] 0 : {Time: 'Dec 14 2022 5:56PM', Moves: 23376089} 1 : {Time: 'Dec 15 2022 12:02PM', Moves: 23139660} 2 : {Time: 'Dec 14 2022 11:54PM', Moves: 23334252} 3 : {Time: 'Dec 15 2022 6:22AM', Moves: 23113578} length : 4 [[Prototype]] : Array(0)
database.service.ts
public getMoves(): Observable<any[]> {
this.moves$ = this.http.get<any[]>('http://localhost:5000/api/moves');
return this.moves$;
}
app.component.ts
ngOnInit(): void {
this.output = this.getMoves()
console.log(this.output)
}
getMoves() {
return this.DataService.getMoves().subscribe((response) => {
this.moves = response
console.log(this.moves)
}
)
}
However, when I try to print out this.moves in ngOnInit, all I get is in output below in console
SafeSubscriber {initialTeardown: undefined, closed: false, _parentage: null, _finalizers: Array(1), isStopped: false, …}
closed
:
true
destination
:
null
initialTeardown
:
undefined
isStopped
:
true
_finalizers
:
null
_parentage
:
null
[[Prototype]]
:
Subscriber
How can I save moves response into an array instead of subscriber which I can use as Highchart input later?
CodePudding user response:
Try this
ngOnInit(): void {
this.getMoves().subscribe(response => {
this.output = this.getMoves();
console.log(this.output);
});
}
getMoves() {
return this.DataService.getMoves().pipe(
tap(response => {
this.moves = response;
console.log(this.moves);
}),
);
}
CodePudding user response:
getMoves()
is not a sync call so you can not have output populate in ngOninit
.
this.output
in ngOnInt
is not this.movies
.
If you see the second console.log in the getMoves()
method, there is a real response.
If you try to print this.moves directy in ngOnInit()
:
movies = []
ngOnInit() {
this.getMoves();
console.log(this.movies) //probaliy is []
}
Probaliy will be print empty array, becasue the response is not ready yet when the console log is invoked.