Tengo dos entidades, Juegos y Jackpots :
interfaz de juego
{ id: string, name: string }Interfaz de premio mayor
{ game: string, amount: number } Primero tengo dos observables , uno para obtener juegos y otro para obtener jackpots .
Y después de obtener los datos, quiero fusionar los datos de los premios mayores en juegos basados en la identificación . Y dado que el observador de jackpots debe obtener los datos cada segundo, utilicé el timer del operador para hacerlo. Así que aquí está mi implementación:
private getGames = (category: string): Observable<IGame[]> => { return timer(0, 3000).pipe( mergeMap(() => combineLatest([this.gameService.getGames(), this.gameService.getJackpots()])), map(([games, jackpots]) => { return games?.filter(game => game?.categories?.includes(category))?.map(game => { return { ...game, jackpot: jackpots?.find(jackpot => jackpot?.game === game?.id) }; }) }) ); };Esta implementación funciona bien y los datos se obtienen cada 3 segundos. Ahora, como puede ver que tanto los Juegos como los Jackpots observables se recuperan cada 3 segundos, mi pregunta es: ¿hay alguna manera de ejecutar solo los Jackpots observables cada 3 segundos y excluir los Juegos observables de ese temporizador?
combineLatest tiene dos propiedades importantes:
Puede configurar el timer solo para los juegos Observable y combinarlo con el de los jackpots .
private getGames = (category: string): Observable<IGame[]> => { return combineLatest([ timer(0, 3000).pipe(mergeMap(() => this.gameService.getGames())), this.gameService.getJackpots(), ]).pipe( map(([games, jackpots]) => { return games ?.filter((game) => game?.categories?.includes(category)) ?.map((game) => { return { ...game, jackpot: jackpots?.find((jackpot) => jackpot?.game === game?.id) }; }); }) ); };