Имам тази услуга, която се обажда на API, за да получи куп описания на филми и връща Observable:
getNowPlayingMovies$(page: number, country?: string): Observable<NowPlaying> {
console.log(`${this.baseUrl}${this.now_playing}?${this.key}®ion=${country || 'US'}&page=${page}`);
return this.http.get<NowPlaying>(
`${this.baseUrl}${this.now_playing}?${this.key}®ion=${country || 'US'}&page=${page}`
);
}
В компонента, който използва тази функция по-горе, аз я наричам промяна на стойността на страницата всеки път, за да мога да предложа на потребителя пагинация в изгледа на компонента.
И това е компонентът, който извиква услугата:
getNowPlayingMovies(): void {
this.nowPlayingService.getNowPlayingMovies$(this.page).subscribe((data) => {
this.nowPlaying.push(
...data.results.filter((result) => result.backdrop_path)
);
if(!this.last_page){
this.last_page = data.total_pages
this.page++;
} else if(this.page <= data.total_pages) {
this.page++;
}
console.log(data);
console.log(this.nowPlaying);
});
}
Четох, че на Angular винаги трябва да се опитвате да работите с помощта на Observable, а не на Promises, но при сценарии като този не виждам никакво предимство да се абонирате за отговора на api call.
Би било правилно да трансформираме Observable в услугата в Promise като това?
getNowPlayingMovies$(page: number, country?: string): Promise<NowPlaying> {
console.log(`${this.baseUrl}${this.now_playing}?${this.key}®ion=${country || 'US'}&page=${page}`);
return this.http.get<NowPlaying>(
`${this.baseUrl}${this.now_playing}?${this.key}®ion=${country || 'US'}&page=${page}`
).toPromise();
}
Уча Angular и работя по това, за да го добавя към моето портфолио, така че искам да се науча да го правя по правилния и възможно най-добрия начин.