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

253
Vistas
Uno por uno observables RxJS

Tengo un problema con los observables. He preparado stackblitz para simplificar mi problema.

Tengo 2 observables (obs1$, obs2$) y una matriz de números. Quiero esperar a que se complete obs1 $ y luego recorrer la matriz y devolver el observable de cada elemento, ejecutar obs2 $.

Aquí está el código de la función:

 oneByOneObservables(): Observable<unknown> { const obs1$ = of(1, 2, 3); const arr = [4, 5, 6]; const obs2$ = of(7, 8, 9); return obs1$.pipe( concat(() => arr.map((item) => of(item))), () => obs2$ ); }

Tengo un error:

Ninguna sobrecarga coincide con esta llamada. La última sobrecarga dio el siguiente error. El argumento de tipo '() => Observable[]' no se puede asignar al parámetro de tipo 'SchedulerLike | Entrada observable'. Falta la propiedad '[Symbol.iterator]' en el tipo '() => Observable[]' pero se requiere en el tipo 'Iterable'.

Gracias por la ayuda

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Así que esto hará el truco. Agregué algunos registros para rastrearlo.

Aquí también está Stackblitz .

 import { Component } from '@angular/core'; import { ChangeDetectionStrategy } from '@angular/core'; import { Observable, of, forkJoin } from 'rxjs'; import { concatMap, tap, last } from 'rxjs/operators'; @Component({ selector: 'my-app', styleUrls: ['./app.component.scss'], templateUrl: './app.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) export class AppComponent { oneByOneObservables(): Observable<unknown> { const obs1$ = of(1, 2, 3).pipe(tap((v) => console.log('Obs1', v))); const arr = [4, 5, 6]; const obs2$ = of(7, 8, 9); return obs1$.pipe( last(), tap((v) => console.log('Obs1 last value', v)), concatMap(() => forkJoin(arr.map((item) => of(item)))), tap((v) => console.log('Array of observables value', v)), concatMap(() => obs2$), tap((v) => console.log('Obs2 value', v)) ); } }
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay algo de código:

  • esperar a que se complete obs1$ ✓
  • luego recorra la matriz y devuelva el observable de cada elemento ✓ (Esto es actualmente un noop desperdiciando algunos ciclos de CPU. Crear un observable no hace nada, ¿planea suscribirse a estos? ¿En orden? ¿Todo a la vez? Depende de usted , Supongo)
  • ejecutar obs2$ ✓
 function oneByOneObservables(): Observable<number> { const obs1$ = of(1, 2, 3); const arr = [4, 5, 6]; const obs2$ = of(7, 8, 9); return obs1$.pipe( concatWith(defer(() => { arr.map((item) => of(item)) return obs2$ })) ); } oneByOneObservables().subscribe(console.log);

producción:

 1 2 3 7 8 9

Un ejemplo en el que se suscribe a la matriz de observables uno tras otro.

 function oneByOneObservables(): Observable<number> { const obs1$ = of(1, 2, 3); const arr = [4, 5, 6]; const obs2$ = of(7, 8, 9); return obs1$.pipe( concatWith(defer(() => concat(...arr.map((item) => of(item))) )), concatWith(obs2$) ); } oneByOneObservables().subscribe(console.log)

producción:

 1 2 3 4 5 6 7 8 9
over 4 years ago · Santiago Trujillo Denunciar

0

¿Puedes usar switchMap? Aunque no estoy seguro de qué salida de los observables está buscando.

 oneByOneObservables(): Observable<unknown> { const obs1$ = of(1, 2, 3); const arr = [4, 5, 6]; const obs2$ = of(7, 8, 9); return obs1$.pipe( concat(() => arr.map((item) => of(item))), switchMap(() => obs2$) ); }
over 4 years ago · Santiago Trujillo 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