Die Funktion more()
soll eine Observable
von einer get-Anfrage zurückgeben
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 eine Anfrage nur dann stellen, wenn sie hasMore()
wahr ist. Andernfalls wird ein subscribe()
Funktionsfehler angezeigt subscribe is not defined
. Wie kann ich eine leere Observable zurückgeben?
this.collection.more().subscribe(
(res) =>{
console.log(res);
},
(err) =>{
console.log(err);
}
)
Aktualisieren
In RXJS 6
import { EMPTY } from 'rxjs'
return EMPTY;
javascript
typescript
rxjs
observable
Murhaf Sousli
quelle
quelle
import "EmptyObservable" from "rxjs/observable/EmptyObservable";
, dannnew EmptyObservable<Response>();
.Mit der neuen Syntax von RxJS 5.5+ wird dies wie folgt:
Nur eine Sache, die Sie beachten sollten,
empty()
vervollständigt das Observable, sodass es nichtnext
in Ihrem Stream ausgelöst wird , sondern nur abgeschlossen wird. Wenn Sie zum Beispiel habentap
, werden sie möglicherweise nicht wie gewünscht ausgelöst (siehe ein Beispiel unten).Während
of({})
erstellt einObservable
und emittiert als nächstes mit einem Wert von{}
und vervollständigt dann dasObservable
.Z.B:
quelle
of()
glaube ichof('foo')
emittiert und vervollständigt das Observable sofort. rxviz.com/v/0oqMVW1otake(1)
entfernt für eine bessere Antwort. @MatthijsWessels, ja und nein, haben dies gerade getestet und wenn Sie dies tun,of()
werden Sie ein vollständiges Observable ohne Emission zurückgebennext
RxJS6 (ohne Kompatibilitätspaket installiert)
Es gibt jetzt eine
EMPTY
Konstante und eineempty
Funktion.Observable.empty()
existiert nicht mehr.quelle
empty()
Funktion haben, können Sieimport { empty as rxEmpty }
oder sagenimport { empty as _empty }
und dann tunrxEmpty()
oder_empty()
. Natürlich ist das eine ziemlich ungewöhnliche Sache und ich empfehle sie nicht wirklich, aber ich bin sicher, dass ich nicht der einzige bin, der überrascht war, dass RxJS der Meinung ist, dass es sich lohnt, Funktionen wie zu importierenof
undempty
in meinen Namespace zu !import { EMPTY } from "@angular/core/src/render3/definition";
das absolut nicht das ist, was Sie wollen. Wenn Sie also seltsame Fehler erhalten, stellen Sie sicher, dass Sie diese nicht versehentlich importieren.Observable.empty()
tatsächlich existiert noch, ist aber zugunsten von veraltetEMPTY
.In meinem Fall mit Angular2 und rxjs funktionierte es mit:
quelle
import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
Ja, es gibt einen leeren Operator
Für Typoskript können Sie Folgendes verwenden
from
:quelle
Rx.Observable<{}>
ist nicht zuordenbarObservable<Response>
, ich habe es versucht,Rx.Observable<Response>.empty()
aber es hat nicht funktioniertObservable<any>
und es hat funktioniert, danke Kumpel.Rx.Observable.from([])
ohne sein<Response>
. Andernfalls wird der Fehler "Ausdruck erwartet" angezeigt.Rx.Observable.of([])
.Observable.of([])
wird ein Wert ausgegeben ([]
) und dann wird der Stream abgeschlossen. WennObservable.from([])
kein Wert ausgegeben wird, wird der Stream sofort abgeschlossen.Verschiedene Möglichkeiten, um ein leeres Observable zu erstellen:
Sie unterscheiden sich nur, wie Sie es wollen weiter verwenden (welche Ereignisse es nach emittieren:
next
,complete
oderdo nothing
) , zB:Observable.never()
- gibt keine Ereignisse aus und endet nie.Observable.empty()
- emittiert nurcomplete
.Observable.of({})
- gibt beide ausnext
undcomplete
(leeres Objektliteral als Beispiel übergeben).Verwenden Sie es für Ihre genauen Bedürfnisse)
quelle
Sie können beispielsweise Observable.of (empty_variable) zurückgeben
quelle
Oder Sie können versuchen ,
ignoreElements()
als auchquelle
RxJS 6
Sie können auch von der Funktion wie unten verwenden:
nach dem Import:
quelle
Kam hier mit einer ähnlichen Frage, funktionierte das oben genannte für mich nicht in:
"rxjs": "^6.0.0"
um ein Observable zu generieren, das keine Daten ausgibt, die ich tun musste:quelle
Versuche dies
quelle