¿Qué son los métodos de tubería y derivación en el tutorial angular? [cerrado]

128

Estoy siguiendo el tutorial en https://angular.io , y tengo problemas para encontrar documentación; específicamente para los métodos pipey tap. No puedo encontrar nada en https://angular.io o http://reactivex.io/rxjs/ .

Mi entendimiento es que pipey tapson ambos métodos de Observableque se importa desde RxJS, correcto? ¿Qué se supone que deben hacer?

¿Son estos métodos parte de Angular? ¿Qué hacen estos dos métodos?

Ben Rubin
fuente
55
Me resulta extraño cuando los usuarios hacen preguntas adecuadas, reciben una respuesta adecuada y, sin embargo, los mods no tienen idea de lo que OP pregunta: D: ¿por qué demonios es esto "fuera de tema"?
Paul Strupeikis

Respuestas:

106

Tienes razón, la documentación carece de esos métodos. Sin embargo, cuando busqué en el repositorio de rxjs, encontré buenos comentarios sobre los operadores de grifo (demasiado largos para pegar aquí) y de tuberías :

  /**
   * Used to stitch together functional operators into a chain.
   * @method pipe
   * @return {Observable} the Observable result of all of the operators having
   * been called in the order they were passed in.
   *
   * @example
   *
   * import { map, filter, scan } from 'rxjs/operators';
   *
   * Rx.Observable.interval(1000)
   *   .pipe(
   *     filter(x => x % 2 === 0),
   *     map(x => x + x),
   *     scan((acc, x) => acc + x)
   *   )
   *   .subscribe(x => console.log(x))
   */

En breve:

Tubería : se utiliza para unir operadores funcionales en una cadena. Antes podíamos hacerlo observable.filter().map().scan(), pero dado que cada operador RxJS es una función independiente en lugar de un método de Observable, necesitamos pipe()hacer una cadena de esos operadores (ver el ejemplo anterior).

Toque : puede realizar efectos secundarios con los datos observados, pero no modifica la transmisión de ninguna manera. Anteriormente llamado do(). Puede pensarlo como si observable fuera una matriz a lo largo del tiempo, entonces tap()sería equivalente a Array.forEach().

Daniel Kucal
fuente
44
Gracias por la respuesta y los enlaces. Parte de mi problema es que soy nuevo en Angular, y no estoy seguro de qué métodos son parte del núcleo de JavaScript o Node.js o RxJS o Angular. Su respuesta me ayudó a aclarar eso. Gracias.
Ben Rubin
3
@BenRubin Recomiendo que comience aprendiendo JS nativo correctamente antes de comenzar a aprender las herramientas. Será mucho más fácil entender las herramientas y lo que realmente hace (y saber qué partes son nativas frente a la herramienta).
Magnus Eriksson
20
desde 5.5 y la introducción de operadores pipeable (una vez conocidos como lettable), doque se renombró como tap... En resumen, es un desastre. github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md
Luca
3
filterfunciona igual que Array.filter: mantiene solo los valores que cumplen la regla (en este caso divisible por 2); map(nuevamente como Array.map) cambia cada valor (en este caso lo agrega a sí mismo); scanes muy interesante y aquí hay una buena explicación: learnrxjs.io/operators/transformation/scan.html
Daniel Kucal
1
parece que el escaneo se reduce
latj