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

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

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

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 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