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

250
Vistas
¿A qué método se debe llamar en lugar de suscribirse en rxjs después de flatMaps cuando no hay una transmisión por la que pasar?

Tengo un método que lo toma como parte de la administración de formularios y hace lo siguiente. Puedo resolver un caso como este con promesas fácilmente, ¡pero este es el momento de aprender observables! Entonces, las tareas del método:

  • llama a clientWebApiService.getClients() para obtener la lista de clientes y devuelve el observable de environmentWebApiService.getEnvironmentsNotInPipeline()
  • en el segundo plano, el resultado se pasará a la variable local
  • en la subscribe me gustaría mapear una estructura de datos a otra para poder configurar cosas de un formulario

El subscribe() arroja el siguiente error:

 ERROR TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable. at Object.subscribeToResult (subscribeToResult.js:73) at MergeMapSubscriber._innerSub (mergeMap.js:130) at MergeMapSubscriber._tryNext (mergeMap.js:127)

Ya (con suerte) me di cuenta de que la suscripción espera una transmisión que no se proporciona aquí. Si veo correctamente, el segundo flatMap debería devolver un Observable que es procesado por subscribe() . En esta estructura no habrá. En este caso, ¿a qué método debería llamarse? Encontré ladocumentación de rxjs con muchos métodos. no se cual busco

He intentado reestructurar mi código, pero si no hay subscribe() , entonces no hay ejecución.

  • ¿Cuál es el caso de mejores prácticas como este?
 public editHandler({ dataItem }): void { let clients: IClientContract[]; let environments: IEnvironmentContract[]; this.clientWebApiService.getClients() .flatMap((clientsResult: any): Observable<IEnvironmentContract[]> => { clients = clientsResult as IClientContract[]; console.log('1', clients); return this.environmentWebApiService.getEnvironmentsNotInPipeline(); }) .flatMap((environmentResult: IEnvironmentContract[]): any => { environments = environmentResult; console.log('2', environments); }) .subscribe(() => { console.log('3'); let editableDeploymentItem: IDeployableEnvironmentForm = this.deployableEnvironmentContractMapperService .mapDeployableEnvironmentContractToDeployableEnvironmentForm( dataItem, clients, environments); console.log('4', editableDeploymentItem); this.editDeployment = editableDeploymentItem; this.isNew = false; }); }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Deberías usar do . do operator simplemente realiza una acción y continúa el vapor. En su caso, no veo por qué necesita otro operador, ya que se puede hacer en el método de subscribe .

Solo puedes hacer:

 public editHandler({ dataItem }): void { let clients: IClientContract[]; let environments: IEnvironmentContract[]; this.clientWebApiService.getClients() .flatMap((clientsResult: any): Observable<IEnvironmentContract[]> => { clients = clientsResult as IClientContract[]; console.log('1', clients); return this.environmentWebApiService.getEnvironmentsNotInPipeline(); }) .subscribe((environmentResult: IEnvironmentContract[]): any => { environments = environmentResult; console.log('2', environments); console.log('3'); let editableDeploymentItem: IDeployableEnvironmentForm = this.deployableEnvironmentContractMapperService .mapDeployableEnvironmentContractToDeployableEnvironmentForm( dataItem, clients, environments); console.log('4', editableDeploymentItem); this.editDeployment = editableDeploymentItem; this.isNew = false; }); }
over 4 years ago · Santiago Trujillo Denunciar

0

En lugar de usar this.clientWebApiService.getClients().flatMap(() => {}) ¿Podría intentarlo usando this.clientWebApiService.getClients().map(() => {}) ?

Leer esto puede ayudar

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