Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

150
Vistas
Cómo mapear una matriz observada para combinar múltiples valores observables más recientes

Estoy conectando un observable, que transmite una variedad de, digamos, comida. Necesito conseguir el último cocinero, la última cocina y el último cuchillo para preparar cada uno de estos alimentos. Estos tres valores son valores obtenidos por un observable como getCookById(food.cook.id). ¿Cómo podría mapearlo así:

  • Estoy esperando la variedad de comida.
  • Cuando lo recibo, mapeo en cada alimento para:
    • obtenga el último cocinero, cocina y cuchillo que son todos de Observables (combineLatest?)
    • combinar todo eso en un objeto como
 { foodItem, cook, kitchen, knife }
  • devuelve la matriz de todos estos elementos transformados

Actualmente, obtengo una serie de elementos vacíos haciéndolo así:

 const foodObservable = new Subject(); foodObservable.pipe( map(foodItems => { return foodItems.map((foodItem: any)=>{ const cookObservable = new Subject(); const kitchenObservable = new Subject(); const knifeObservable = new Subject(); combineLatest(cookObservable, kitchenObservable, knifeObservable).subscribe(([cook, kitchen, knife]) => { return { foodItem, cook, kitchen, knife }; }); }) }) ).subscribe(foodPreparationArray=>{ console.log(foodPreparationArray) // array of empty values :( })

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Según su condición y su comentario, sugeriría los siguientes cambios

  1. Necesitaría usar un operador de mapeo de orden superior como switchMap para mapear de un observable a otro. El operador de map se utiliza para transformar los datos emitidos.

  2. Usar Firebase get() en lugar de valueChanges() sería una mejor opción. Supongo que necesita el valor en este momento y no necesita observar ningún cambio en la propiedad. Vea aquí para más información.

  3. El uso de get() en lugar de valueChanges() nos proporciona observables que se completan en lugar de transmitir. Entonces podría reemplazar combineLatest con forkJoin .

  4. Necesitarías dos forkJoin s. El primer forkJoin es para activar solicitudes para cada elemento de la matriz foodItems y el segundo forkJoin es para activar solicitudes para cook , knife y kitchen simultáneamente.

  5. Finalmente, podría usar el operador de map para combinar todo.

Prueba lo siguiente

 foodObservable.pipe( switchMap((foodItems: any) => // <-- RxJS `switchMap` operator forkJoin( foodItems.map((foodItem: any) => // <-- JS `Array#map` function forkJoin({ cook: db.collection('cook').doc(foodItem.cookId).get(), kitchen: db.collection('kitchen').doc(foodItem.kitchenId).get(), knife: db.collection('knife').doc(foodItem.knifeId).get() }).pipe( map(({cook, kitchen, knife}) => ({ // <-- RxJS `map` operator ...foodItem, // <-- spread operator cook: cook, kitchen: kitchen, knife: knife )}) ) ) ) ) ).subscribe({ next: (foodPreparationArray: any) => { console.log(foodPreparationArray); }, error: (error: any) => { // handle error } });
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda