example - observables angular 5
Observable.of no es una funciĆ³n (19)
Tengo problemas con la importación de la función
Observable.of
en mi proyecto.
Mi Intellij lo ve todo.
En mi código tengo:
import {Observable} from ''rxjs/Observable'';
y en mi código lo uso así:
return Observable.of(res);
¿Algunas ideas?
Aunque suena absolutamente extraño, para mí fue importante capitalizar la ''O'' en la ruta de
import {Observable} from ''rxjs/Observable
de
import {Observable} from ''rxjs/Observable
.
El mensaje de error con
observable_1.Observable.of is not a function
permanece presente si importo el Observable de
rxjs/observable
.
Extraño pero espero que ayude a otros.
De alguna manera, incluso Webstorm lo hizo como esta
import {of} from ''rxjs/observable/of'';
y todo empezó a funcionar
En
rxjs
v6, el operador debe importarse como
import { of } from ''rxjs'';
En realidad tengo las importaciones en mal estado. En la última versión de RxJS podemos importarlo así:
import ''rxjs/add/observable/of'';
Esto debería funcionar correctamente, solo pruébalo.
import { Observable } from ''rxjs/Observable'';
import ''rxjs/add/observable/of'';
Estoy usando Angular 5.2 y RxJS 5.5.6
Este código no funcionó:
import { Observable,of } from ''rxjs/Observable'';
getHeroes(): Observable<Hero[]> {
return of(Hero[]) HEROES;
}
El siguiente código funcionó:
import { Observable } from ''rxjs/Observable'';
import { Subscriber } from ''rxjs/Subscriber'';
getHeroes(): Observable<Hero[]>
{
return Observable.create((observer: Subscriber<any>) => {
observer.next(HEROES);
observer.complete();
});
}
Método de llamada:
this.heroService.getHeroes()
.subscribe(heroes => this.heroes = heroes);
Creo que podrían mover / cambiar la funcionalidad () en RxJS 5.5.2
Los parches no me funcionaban, por cualquier razón, así que tuve que recurrir a este método:
import { of } from ''rxjs/observable/of''
// ...
return of(res)
Mi error tonto fue que olvidé agregar
/add
cuando requería lo observable.
Estaba:
import { Observable } from ''rxjs/Observable'';
import ''rxjs/observable/of'';
Que visualmente se ve bien porque
rxjs/observable/of
file, de hecho, existe.
Debiera ser:
import { Observable } from ''rxjs/Observable'';
import ''rxjs/add/observable/of'';
Para Angular 5+:
import { Observable } from ''rxjs/Observable'';
Deberia trabajar.
El paquete del observador debe coincidir con la importación, así como
import { Observer } from ''rxjs/Observer'';
si estás usando observadores que es
import {<something>} from ''rxjs'';
hace una gran importación, así que es mejor evitarlo.
Para mí (Angular 5 y RxJS 5) la importación de autocompletar sugirió:
import { Observable } from ''../../../../../node_modules/rxjs/Observable'';
while to should be (con todos los operadores estáticos
from
,
of
, ect funcionando bien:
import { Observable } from ''rxjs/Observable'';
Si alguien tiene este problema mientras usa Angular 6 / rxjs 6, vea las respuestas aquí: No se pudo usar Observable.of en RxJs 6 y Angular 6
En resumen, debe importarlo así:
import { of } from ''rxjs'';
Y luego en lugar de llamar
Observable.of(res);
Solo usa
of(res);
Si está usando Angular 6/7
import { of } from ''rxjs'';
Y luego en lugar de llamar
Observable.of(res);
Solo usa
of(res);
Solo para agregar,
si está usando muchos de ellos, puede importarlos todos usando
import ''rxjs/Rx'';
como lo mencionó @Thierry Templier. Pero creo que si está utilizando un operador limitado, debe importar un operador individual como
import ''rxjs/add/operator/filter'';
import ''rxjs/add/operator/mergeMap'';
import ''rxjs/add/observable/of'';
como lo menciona @uksz.
Porque ''rxjs / Rx'' importará todos los componentes Rx que definitivamente cuestan rendimiento.
También puede importar todos los operadores de esta manera:
import {Observable} from ''rxjs/Rx'';
Tuve este problema hoy. Estoy usando systemjs para cargar las dependencias.
Estaba cargando los Rxjs así:
...
paths: {
"rxjs/*": "node_modules/rxjs/bundles/Rx.umd.min.js"
},
...
En lugar de usar rutas, use esto:
var map = {
...
''rxjs'': ''node_modules/rxjs'',
...
}
var packages = {
...
''rxjs'': { main: ''bundles/Rx.umd.min.js'', defaultExtension: ''js'' }
...
}
Este pequeño cambio en la forma en que systemjs carga la biblioteca solucionó mi problema.
¿Actualizado de Angular 5 / Rxjs 5 a Angular 6 / Rxjs 6?
Debe cambiar sus importaciones y su instanciación. Mira la publicación de blog de Damien
Tl; dr:
import { Observable, fromEvent, of } from ''rxjs'';
const yourResult = Observable
.create(of(yourObservable))
.startWith(null)
.map(x => x.someStringProperty.toLowerCase());
//subscribe to keyup event on input element
Observable
.create(fromEvent(yourInputElement, ''keyup''))
.debounceTime(5000)
.distinctUntilChanged()
.subscribe((event) => {
yourEventHandler(event);
});
RxJS 6
Al actualizar a la versión 6 de la biblioteca
RxJS
y no usar el paquete
rxjs-compat
, el siguiente código
import ''rxjs/add/observable/of'';
// ...
return Observable.of(res);
tiene que ser cambiado a
import { of } from ''rxjs'';
// ...
return of(res);
// "rxjs": "^5.5.10"
import { of } from ''rxjs/observable/of'';
....
return of(res)
import ''rxjs/add/observable/of'';
muestra un requisito de rxjs-compat
require("rxjs-compat/add/observable/of");
No tenía esto instalado. Instalado por
npm install rxjs-compat --save-dev
y volver a ejecutar solucionó mi problema.