У меня есть метод, который использует службу для получения списка книг, мне нужен второй метод, который использует список книг, чтобы получить одну книгу, фильтруя ее по идентификатору. Эти два метода вызываются в ngOnInit одного и того же компонента. Я получаю то, что второй метод использует список книг до того, как получит свои результаты.
Я исправил проблему, вызвав второй метод в первом внутри результатов .subscribe, а затем вызвав только первый в ngOnInit. Я не нашел решение вполне удовлетворительным, мне нужен более общий и организованный способ ...
export class BookComponent implements OnInit {
public books: Book[];
public book: Book;
public id;
public sub;
constructor(private activatedRoute: ActivatedRoute, private router: Router, private bookService: BookService) {}
getBooks() {
this.bookService.getBooks().subscribe(
result => {
this.books = result;
}
);
}
findById() {
this.sub = this.activatedRoute.paramMap.subscribe(params => {
console.log(params);
this.id = params.get('id');
this.book = this.books.find(a => a.id == this.id);
});
}
ngOnInit() {
this.getbooks();
this.findById();
}
}
Вот ошибка, которую я получаю:
ERROR TypeError: Cannot read property 'find' of undefined