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

308
Visualizações
Prácticas recomendadas: utilice switchMap en lugar de varias Suscripciones

En mi proyecto para aprender Angular. Ejecuté una función que devuelve múltiples valores usando RxJS.

El problema es que descubrí que usar varios suscriptores se reduce a Subscribe hell...

Probé con SwitchMap, funcionó para el primer valor devuelto, pero tengo que usar ese último valor devuelto para devolver otros valores. el problema es que me devuelve un valor indefinido. Creo que hice mal uso de switchMap...

(Pondré las 2 versiones de mi función):

Método de trabajo pero con múltiples Suscripciones:

 addToCart2() { const { quantity } = this.productForm.value; const sessionCart = sessionStorage.getItem('cart_Session'); // Get Cart ID from SessionStorage this.cartService .retrieveCart(sessionCart!) .subscribe(({ id: cart_ID }: Cart) => { console.log('ID Cart : ', cart_ID); console.log('Cart Already init'); // Add to cart method this.cartService .addToCart(cart_ID, this.product_ID, quantity, this.variant_Data) .subscribe( () => { // Get current cart items to send Total items to Header this.cartService.retrieveCart(cart_ID).subscribe((items) => { this.cart_Items = items.line_items; this.total_Items = items.total_unique_items; this.cartService._totalItems$.next(this.total_Items); }); // Modal Success TODO !! }, (err) => { console.log('Error in Request !!!', err); }, () => { console.log('Add to Cart Finish.'); } ); }); }

Usando SwitchMap pero no funciona completamente:

 addToCart__NotWorking() { // Test const { quantity } = this.productForm.value; const sessionCart = sessionStorage.getItem('cart_Session'); this.cartService .retrieveCart(sessionCart!) .pipe( switchMap(({ id: cart_ID }) => { console.log('SwitchMap', cart_ID); return this.cartService.addToCart( cart_ID, this.product_ID, quantity, this.variant_Data ); }), switchMap(({ id: cart_ID }) => { return this.cartService.retrieveCart(cart_ID); }) ) .subscribe((values) => { console.log('SwitchMap Final True : ', values); });

}

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Sí, parece que está perdiendo cart_id entre switchMaps, return this.cartService.addToCart no devuelve la identificación, al menos de acuerdo con sus suscripciones anidadas, en su lugar, usa la misma identificación de carrito que pasa a addToCart . Lo que puede hacer es usar mapTo ya que no parece necesitar la respuesta devuelta por this.cartService.addToCart . Entonces, podrías hacer:

 switchMap(({ id: cart_ID }) => { console.log('SwitchMap', cart_ID); return this.cartService.addToCart( cart_ID, this.product_ID, quantity, this.variant_Data ).pipe( mapTo({ id: cart_ID }) // here, now it returns the id! ); }), // .....
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