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

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

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

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

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