Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

257
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda