Se more()
supone que la función devuelve una Observable
solicitud get
export class Collection{
public more = (): Observable<Response> => {
if (this.hasMore()) {
return this.fetch();
}
else{
// return empty observable
}
}
private fetch = (): Observable<Response> => {
return this.http.get('some-url').map(
(res) => {
return res.json();
}
);
}
}
En este caso, solo puedo hacer una solicitud si hasMore()
es verdadera, de lo contrario, obtengo un error en la subscribe()
función subscribe is not defined
, ¿cómo puedo devolver un observable vacío?
this.collection.more().subscribe(
(res) =>{
console.log(res);
},
(err) =>{
console.log(err);
}
)
Actualizar
En RXJS 6
import { EMPTY } from 'rxjs'
return EMPTY;
javascript
typescript
rxjs
observable
Murhaf Sousli
fuente
fuente
import "EmptyObservable" from "rxjs/observable/EmptyObservable";
, entoncesnew EmptyObservable<Response>();
.Con la nueva sintaxis de RxJS 5.5+, esto se convierte en lo siguiente:
Solo una cosa a tener en cuenta,
empty()
completa lo observable, por lo que no se activaránext
en su transmisión, sino que solo se completará. Entonces, si tiene, por ejemplo,tap
es posible que no se activen como desee (vea un ejemplo a continuación).Mientras que
of({})
crea unObservable
y emite a continuación con un valor de{}
y luego completa elObservable
.P.ej:
fuente
of()
, creoof('foo')
emite y completa el observable inmediatamente. rxviz.com/v/0oqMVW1otake(1)
eliminado para una mejor respuesta. @MatthijsWessels, sí y no, acabo de probar esto ahora y, si lo hacesof()
, devolverás un observable completo sin emitirlonext
RxJS6 (sin paquete de compatibilidad instalado)
Ahora hay una
EMPTY
constante y unaempty
función.Observable.empty()
ya no existefuente
empty()
función, puede decirimport { empty as rxEmpty }
oimport { empty as _empty }
y luego hacerrxEmpty()
o_empty()
. Por supuesto, eso es algo bastante poco estándar y no lo estoy recomendando, pero estoy seguro de que no soy el único que se sorprendió. ¡RxJS cree que es digno de importar funciones comoof
yempty
en mi espacio de nombres!import { EMPTY } from "@angular/core/src/render3/definition";
tenga cuidado si usa Angular porque también hay algo que no es completamente lo que desea. Entonces, si obtiene errores extraños, asegúrese de no importarlos por error.Observable.empty()
Realmente todavía existe pero está en desuso a favor deEMPTY
.En mi caso con Angular2 y rxjs, funcionó con:
fuente
import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
Sí, hay un operador vacío
Para el mecanografiado, puede usar
from
:fuente
Rx.Observable<{}>
no es asignableObservable<Response>
, lo intentéRx.Observable<Response>.empty()
pero no funcionóObservable<any>
y funcionó, gracias amigo.Rx.Observable.from([])
fuera<Response>
. De lo contrario, aparece un error "expresión esperada".Rx.Observable.of([])
.Observable.of([])
, hay un valor emitido ([]
) y luego la secuencia se completa. ConObservable.from([])
, no se emite ningún valor, la secuencia se completa inmediatamente.Varias formas de crear un Observable vacío:
Simplemente difieren en cómo lo va a usar más (qué eventos emitirá después de
next
,complete
odo nothing
) por ejemplo:Observable.never()
- No emite eventos y nunca termina.Observable.empty()
- solo emitecomplete
.Observable.of({})
- emite ambosnext
ycomplete
(objeto literal literal pasado como ejemplo).Úselo en sus necesidades exactas)
fuente
Puede devolver Observable.of (empty_variable), por ejemplo
fuente
O puedes intentarlo
ignoreElements()
tambiénfuente
RxJS 6
puede usar también desde la función como a continuación:
después de la importación:
fuente
Vine aquí con una pregunta similar, lo anterior no funcionó para mí:
"rxjs": "^6.0.0"
para generar un observable que no emita ningún dato que deba hacer:fuente
Prueba esto
fuente