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

224
Vistas
quiero saber como entregar el valor de rxjs al sujeto

mi código: https://stackblitz.com/edit/rxjs-fgzw2i?devtoolsheight=60&file=index.ts

 export class myCalss { sub$: BehaviorSubject<number>; constructor() { this.sub$ = new BehaviorSubject(0); } test() { from([1,2,3,4]).subscribe( this.sub$.next, // num => this.sub$.next(num) console.log ) } }

Es mi código. Hay un error en el código, pero no sé por qué. Por favor, hágamelo saber si hay algún problema en este código. Especialmente cuando el valor se pasa dentro de la función de suscripción, tengo curiosidad sobre la parte en la que desea pasar el valor pasado al sub$. Normalmente, escribo el código de la siguiente manera.

num => this.sub$.next(num)

Pero descubrí que también puedo escribirlo así, ¿no? this.sub$.next

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

No puede hacer eso en este caso, porque su Subject es del tipo <number> . Si no recuerdo mal a partir de rxjs 7 , puede llamar a this.sub$.next() sin argumentos, pero el Subject debe ser del tipo <void> . El único uso que tiene son los casos en que el valor emitido no tiene ninguna importancia, lo que tiene importancia es el hecho de que el valor fue emitido, aunque no sea nothing . Según los documentos , un ejemplo sería un timer reactivo, de todos modos no puedo ver el punto. ¿Por qué lo llamarías con un argumento vacío? No está claro para alguien que no ha visto el proceso de desarrollo. Causa problemas cuando se usa en combinación con takeUntil . Además, esto puede generar un error de compilación debido al strict mode . Debería ser como a continuación, bueno, no como si pudieras hacerlo de otra manera si el tipo es <number> ...

De todos modos, ha configurado una lógica que emite cierto valor, y ese valor debe tratarse en algún lugar de alguna manera, pero next() sin argumento se usa cuando el valor emitido no importa. Incluso si pudiera usarlo, es inadecuado en este caso.

Usar

 test() { from([1, 2, 3, 4]).subscribe({ next: (data) => { this.sub$.next(data); }, }); }

o solo

 test() { from([1, 2, 3, 4]).subscribe((data) => { this.sub$.next(data); }); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Pero descubrí que también puedo escribirlo así, ¿no? esto.sub$.siguiente

Respuesta corta: lamentablemente, no. Si bien esta sintaxis no es incorrecta per se , obtiene un error porque el alcance de this se pierde si usa esta sintaxis de "función de orden superior".

Respuesta larga:

La clase Subject de la biblioteca rxjs usa la palabra clave this en algún momento, por lo que pasar la función como parámetro a la subscribe hace que pierda el alcance correcto. Considere este ejemplo:

 class MockSubject { next(value) { console.log('A function not referring `this` ' + value); } }

y aquí hay un ejemplo de uso como lo intentaste:

 mockSubject = new MockSubject; test() { from([1, 2, 3, 4]).subscribe( this.mockSubject.next, // num => this.sub$.next(num) console.log, ); }

Este ejemplo no recibe ese error porque el next método de la clase MockSubject no hace referencia a this objeto. Por supuesto, no puede saber si una función en una clase usa la palabra clave this , por lo que mi consejo es evitar esa sintaxis.

(el ejemplo completo en un stackblitz bifurcado del tuyo: https://stackblitz.com/edit/rxjs-1jrzbf?file=index.ts )

Y como consejo final, no use el método de suscripción con dos devoluciones de llamada ya que esta forma está obsoleta; use el objeto PartialObserver en su lugar de esta manera:

 { next: num => this.sub$.next(num), // num => this.sub$.next(num), error: console.log }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Tu puedes hacer:

 export class MyCalss { sub$: BehaviorSubject<number> = new BehaviorSubject(0); number$ = from([1, 2, 3, 4]).pipe( tap((num) => console.log), tap((num) => this.sub$.next) ); test() { this.number$.subscribe(); } }
about 4 years ago · Juan Pablo Isaza 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