Zurück ein leerer Beobachten
Die Funktion more()
soll, um eine Observable
aus einer get-Anfrage
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();
}
);
}
}
In diesem Fall kann ich nur tun, wenn hasMore()
wahr ist, sonst bekomme ich eine Fehlermeldung auf subscribe()
Funktion subscribe is not defined
, wie kann ich wieder eine leere beobachtbar?
this.collection.more().subscribe(
(res) =>{
console.log(res);
},
(err) =>{
console.log(err);
}
)
Update
In RXJS 6
import { EMPTY } from 'rxjs'
return EMPTY;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für typescript können Sie angeben, generic param deiner leeren beobachten, wie diese:
import "EmptyObservable" from "rxjs/observable/EmptyObservable";
, dannnew EmptyObservable<Response>();
.Mit der neuen syntax z.B. rxjs 5.5+, wird dies wie folgt:
Nur eine Sache im Auge zu behalten,
empty()
rundet das beobachtbare, so es wird nicht ausgelöstnext
in Ihrem stream, nur beendet! Also, wenn Sietap
zum Beispiel, dass Sie möglicherweise nicht auslösen, wie Sie wollen (siehe Beispiel unten).in der Erwägung, dass
of({})
schafft eine beobachtbare und strahlt weiter mit einem Wert von{}
und dann schließt es die beobachtbar.z.B.
of()
ich glaube, dassof('foo')
tut emittieren und vollständig beobachtbaren sofort. rxviz.com/v/0oqMVW1otake(1)
entfernt für eine bessere Antwort. @MatthijsWessels, ja und Nein, gerade getestet jetzt und wenn Sieof()
zurück vervollständigen beobachten, ohne dassnext
In meinem Fall mit Angular2 und rxjs, es arbeiteten mit:
import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
RxJS6 (ohne Kompatibilitäts-Paket installiert)
Gibt es jetzt einen
EMPTY
ständige und eineempty
Funktion.Observable.empty()
existiert nicht mehr.empty()
Funktion schon kann man sagenimport { empty as rxEmpty }
oderimport { empty as _empty }
tun, und dannrxEmpty()
oder_empty()
. Das ist natürlich ein ziemlich non-standard, was zu tun und ich bin eigentlich nicht empfehlen, aber ich bin sicher, ich bin nicht die einzige, die überrascht war, RxJS denkt, es ist würdig Import Funktionen wieof
undempty
in meinem Namensraum!import { EMPTY } from "@angular/core/src/render3/definition";
die ist komplett nicht das, was Sie wollen. Also, wenn Sie ungerade Fehler stellen Sie sicher, dass Sie nicht importieren, dass durch Fehler.Ja, es ist am Leer Betreiber
Zur Typoskript, können Sie
from
:Rx.Observable<{}>
ist nicht zuweisbarObservable<Response>
habe ich versucht zuRx.Observable<Response>.empty()
aber es hat nicht funktioniertObservable<any>
und es hat funktioniert, danke Kumpel.Rx.Observable.from([])
ohne<Response>
. Sonst immer eine Fehlermeldung "Ausdruck erwartet".Rx.Observable.of([])
.Observable.of([])
gibt es einen Wert emittiert ([]
) und dann der stream abgeschlossen ist. MitObservable.from([])
, wird kein Wert ausgegeben, der stream sofort abgeschlossen.import {EMPTY} from 'rxjs'
(besser als dieempty()
- Methode). Ich gehe davon aus, dass es ein Speicher-Sache (d.h. Wiederverwendung der gleichen leere Werte ist besser als die Schaffung mehrere leere Objekte)Mehrere Möglichkeiten zum erstellen einer Leeren Beobachten:
Sie unterscheiden sich gerade, wie Sie gehen zu verwenden, weitere (welche Ereignisse er aus nach:
next
,complete
oderdo nothing
) z.B.:Observable.never()
- strahlt keine Veranstaltungen und endet nie.Observable.empty()
- emittiert nurcomplete
.Observable.of({})
- strahlt sowohlnext
undcomplete
(Leere object-literal übergeben als Beispiel).Verwenden Sie es auf Ihre genauen Bedürfnisse)
Können Sie zurück zu Beobachten.der(empty_variable), zum Beispiel
Oder Sie können versuchen
ignoreElements()
sowieVersuchen, diese
RxJS 6
können Sie auch aus der Funktion, wie unten:
nach dem importieren:
Kam hier mit einer ähnlichen Frage, die oben nicht für mich arbeiten, in:
"rxjs": "^6.0.0"
, um zu generieren, eine beobachtbare, das strahlt keine Daten, die ich brauchte, zu tun: