La fonction more()
est censée renvoyer un à Observable
partir d'une requête 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();
}
);
}
}
Dans ce cas, je ne peux faire une requête que si hasMore()
c'est vrai, sinon j'obtiens une erreur sur la subscribe()
fonction subscribe is not defined
, comment puis-je retourner une observable vide?
this.collection.more().subscribe(
(res) =>{
console.log(res);
},
(err) =>{
console.log(err);
}
)
Mettre à jour
Dans RXJS 6
import { EMPTY } from 'rxjs'
return EMPTY;
javascript
typescript
rxjs
observable
Murhaf Sousli
la source
la source
import "EmptyObservable" from "rxjs/observable/EmptyObservable";
, alorsnew EmptyObservable<Response>();
.Avec la nouvelle syntaxe de RxJS 5.5+, cela devient comme suit:
Juste une chose à garder à l'esprit,
empty()
complète l'observable, donc il ne se déclenchera pasnext
dans votre flux, mais se terminera seulement. Donc si vous avez, par exemple,tap
ils pourraient ne pas se déclencher comme vous le souhaitez (voir un exemple ci-dessous).Alors que
of({})
crée unObservable
et émet ensuite avec une valeur de{}
, puis il complète leObservable
.Par exemple:
la source
of()
je croisof('foo')
émet et complète l'observable immédiatement. rxviz.com/v/0oqMVW1otake(1)
supprimé pour une meilleure réponse. @MatthijsWessels, oui et non, vient de tester cela maintenant et si vous le faites, vousof()
retournerez un observable complet sans émettrenext
RxJS6 (sans package de compatibilité installé)
Il y a maintenant une
EMPTY
constante et uneempty
fonction.Observable.empty()
n'existe plus.la source
empty()
fonction, vous pouvez direimport { empty as rxEmpty }
ouimport { empty as _empty }
puis fairerxEmpty()
ou_empty()
. Bien sûr, c'est une chose assez inhabituelle à faire et je ne le recommande pas vraiment, mais je ne suis pas le seul à avoir été surpris que RxJS pense qu'il vaut la peine d'importer des fonctions commeof
etempty
dans mon espace de noms!import { EMPTY } from "@angular/core/src/render3/definition";
ce qui n'est pas du tout ce que vous voulez. Donc, si vous rencontrez des erreurs étranges, assurez-vous de ne pas l'importer par erreur.Observable.empty()
en fait existe encore , mais il est dépréciée en faveurEMPTY
.Dans mon cas avec Angular2 et rxjs, cela fonctionnait avec:
la source
import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
Oui, il y a un opérateur vide
Pour dactylographié, vous pouvez utiliser
from
:la source
Rx.Observable<{}>
pas assignable àObservable<Response>
, j'ai essayéRx.Observable<Response>.empty()
mais ça n'a pas fonctionnéObservable<any>
et cela a fonctionné, merci mon pote.Rx.Observable.from([])
sans<Response>
. Sinon, obtenir une erreur "expression attendue".Rx.Observable.of([])
.Observable.of([])
, il y a une valeur émise ([]
), puis le flux se termine. AvecObservable.from([])
, aucune valeur n'est émise, le flux se termine immédiatement.Plusieurs façons de créer un observable vide:
Ils diffèrent seulement sur la façon dont vous allez utiliser davantage (quels événements il émettra après:
next
,complete
oudo nothing
) , par exemple:Observable.never()
- n'émet aucun événement et ne se termine jamais.Observable.empty()
- émet uniquementcomplete
.Observable.of({})
- émet à la foisnext
etcomplete
(littéral d'objet vide passé comme exemple).Utilisez-le sur vos besoins exacts)
la source
Vous pouvez renvoyer Observable.of (empty_variable), par exemple
la source
Ou tu peux
ignoreElements()
aussi essayerla source
RxJS 6
vous pouvez également utiliser une fonction comme ci-dessous:
après l'importation:
la source
Je suis venu ici avec une question similaire, ce qui précède n'a pas fonctionné pour moi dans:,
"rxjs": "^6.0.0"
afin de générer un observable qui n'émet aucune donnée que je devais faire:la source
Essaye ça
la source