from example ejemplo angular typescript rxjs angular2-observables

example - rxjs observable angular



La mejor manera de importar Observable desde rxjs (3)

Rxjs v 6. *

Se simplificó con la versión más nueva de rxjs.

1) operadores

import {map} from ''rxjs/operators'';

2) otros

import {Observable,of, from } from ''rxjs'';

En lugar de encadenarnos necesitamos canalizar. Por ejemplo

Antigua sintaxis:

source.map().switchMap().subscribe()

Nueva sintaxis:

source.pipe(map(), switchMap()).subscribe()

Nota: ¡ Algunos operadores tienen un cambio de nombre debido a colisiones de nombres con palabras reservadas de JavaScript! Éstos incluyen:

do -> tap ,

catch -> catchError

switch -> switchAll

finally -> finalize

Rxjs v 5. *

Escribo esta respuesta en parte para ayudarme a mí mismo, ya que sigo revisando documentos cada vez que necesito importar un operador. Avíseme si se puede hacer algo mejor.

1) import { Rx } from ''rxjs/Rx'' ;

Esto importa toda la biblioteca. Entonces no necesita preocuparse por cargar cada operador. Pero necesitas agregar Rx. Espero que el movimiento de los árboles optimice y seleccione solo las funciones necesarias (es necesario verificar) Como se mencionó en los comentarios, el movimiento de los árboles no puede ayudar. Entonces esta no es una forma optimizada.

public cache = new Rx.BehaviorSubject('''');

O puede importar operadores individuales .

Esto optimizará su aplicación para usar solo esos archivos :

2) import { _______ } from ''rxjs/_________'';

Esta sintaxis generalmente se usa para el Objeto principal como Rx sí mismo o Observable , etc.

Palabras clave que pueden importarse con esta sintaxis

Observable, Observer, BehaviorSubject, Subject, ReplaySubject

3) import ''rxjs/add/observable/__________'';

Actualización para Angular 5

Con Angular 5, que usa rxjs 5.5.2+

import { empty } from ''rxjs/observable/empty''; import { concat} from ''rxjs/observable/concat'';

Estos generalmente se acompañan con Observable directamente. Por ejemplo

Observable.from() Observable.of()

Otras palabras clave similares que se pueden importar utilizando esta sintaxis:

concat, defer, empty, forkJoin, from, fromPromise, if, interval, merge, of, range, throw, timer, using, zip

4) import ''rxjs/add/operator/_________'';

Actualización para Angular 5

Con Angular 5, que usa rxjs 5.5.2+

import { filter } from ''rxjs/operators/filter''; import { map } from ''rxjs/operators/map'';

Estos generalmente vienen en la secuencia después de que se crea el Observable. Como flatMap en este fragmento de código:

Observable.of([1,2,3,4]) .flatMap(arr => Observable.from(arr));

Otras palabras clave de este tipo que usan esta sintaxis:

audit, buffer, catch, combineAll, combineLatest, concat, count, debounce, delay, distinct, do, every, expand, filter, finally, find , first, groupBy, ignoreElements, isEmpty, last, let, map, max, merge, mergeMap, min, pluck, publish, race, reduce, repeat, scan, skip, startWith, switch, switchMap, take, takeUntil, throttle, timeout, toArray, toPromise, withLatestFrom, zip

FlatMap : flatMap es un alias para mergeMap por lo que debemos importar mergeMap para usar flatMap .

Nota para /add importaciones :

Solo necesitamos importar una vez en todo el proyecto. Por lo tanto, se recomienda hacerlo en un solo lugar. Si se incluyen en varios archivos y se elimina uno de ellos, la compilación fallará por razones incorrectas.

En mi aplicación angular 2 tengo un servicio que usa la clase Observable de la biblioteca rxjs .

import { Observable } from ''rxjs'';

Por el momento, solo estoy usando Observable para poder usar la función toPromise() .

Leí en otra pregunta de StackOverflow en algún lugar que importar de esta manera y también importar de rxjs/Rx importará muchas cosas innecesarias de la biblioteca de rxjs que aumentarán los tiempos de carga de la página y / o la base de código.

Mi pregunta es, ¿cuál es la mejor manera de importar Observable para poder usar la función toPromise() sin tener que importar todo lo demás?


Una cosa que aprendí por las malas es ser consistente

Cuidado con la mezcla:

import { BehaviorSubject } from "rxjs";

con

import { BehaviorSubject } from "rxjs/BehaviorSubject";

Esto probablemente funcionará bien HASTA que intente pasar el objeto a otra clase (donde lo hizo al revés) y luego esto puede fallar

(myBehaviorSubject instanceof Observable)

Falla porque la cadena del prototipo será diferente y será falsa.

No puedo pretender entender exactamente lo que está sucediendo, pero a veces me encuentro con esto y necesito cambiar al formato más largo.


Actualización para RxJS 6 (abril de 2018)

Ahora está perfectamente bien importar directamente desde rxjs . (Como se puede ver en Angular 6+). Importar desde rxjs/operators también está bien y en realidad ya no es posible importar operadores a nivel mundial (una de las principales razones para refactorizar rxjs 6 y el nuevo enfoque usando pipe ). Gracias a este movimiento de árboles ahora también se puede utilizar.

Código de muestra del repositorio de rxjs:

import { Observable, Subject, ReplaySubject, from, of, range } from ''rxjs''; import { map, filter, switchMap } from ''rxjs/operators''; range(1, 200) .pipe(filter(x => x % 2 === 1), map(x => x + x)) .subscribe(x => console.log(x));

¿Compatibilidad con versiones anteriores para rxjs <6?

El equipo de rxjs lanzó un paquete de compatibilidad en npm que es prácticamente instalar y jugar. Con esto, todo su código rxjs 5.x debería ejecutarse sin problemas. Esto es especialmente útil ahora cuando la mayoría de las dependencias (es decir, módulos para Angular) aún no están actualizadas.