Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

245
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!