A função more()
deve retornar um Observable
de uma solicitação 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();
}
);
}
}
Nesse caso, só posso fazer uma solicitação se hasMore()
for verdadeira; caso contrário, recebo um erro na subscribe()
função subscribe is not defined
, como posso retornar um observável vazio?
this.collection.more().subscribe(
(res) =>{
console.log(res);
},
(err) =>{
console.log(err);
}
)
Atualizar
No RXJS 6
import { EMPTY } from 'rxjs'
return EMPTY;
javascript
typescript
rxjs
observable
Murhaf Sousli
fonte
fonte
import "EmptyObservable" from "rxjs/observable/EmptyObservable";
entãonew EmptyObservable<Response>();
.Com a nova sintaxe do RxJS 5.5+, isso se torna o seguinte:
Apenas uma coisa a ter em mente:
empty()
conclui o observável, para que não seja acionadonext
no seu fluxo, mas apenas é concluído. Portanto, se você tiver, por exemplo,tap
eles podem não ser acionados como você deseja (veja um exemplo abaixo).Considerando que
of({})
cria umObservable
e emite a seguir com um valor de{}
e, em seguida, conclui oObservable
.Por exemplo:
fonte
of()
eu acredito #of('foo')
emite e completa o observável imediatamente. rxviz.com/v/0oqMVW1otake(1)
removido para uma resposta melhor. @MatthijsWessels, sim e não, apenas testou este agora e se o fizerof()
irá retornar um observável completa sem emitirnext
RxJS6 (sem pacote de compatibilidade instalado)
Agora há uma
EMPTY
constante e umaempty
função.Observable.empty()
não existe mais.fonte
empty()
função, pode dizerimport { empty as rxEmpty }
orimport { empty as _empty }
e, em seguida,rxEmpty()
or or_empty()
. Claro que isso é uma coisa bastante fora do padrão e não estou recomendando, mas tenho certeza de que não sou a única surpresa que o RxJS acha que vale a pena importar funções comoof
eempty
para o meu espaço para nome!import { EMPTY } from "@angular/core/src/render3/definition";
que você não quer. Portanto, se você estiver recebendo erros estranhos, verifique se não está importando isso por engano.Observable.empty()
na verdade ainda existe, mas foi preterido em favor deEMPTY
.No meu caso com Angular2 e rxjs, ele trabalhou com:
fonte
import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
Sim, existe um operador Vazio
Para texto datilografado, você pode usar
from
:fonte
Rx.Observable<{}>
não é atribuívelObservable<Response>
, tentei,Rx.Observable<Response>.empty()
mas não funcionou #Observable<any>
e funcionou, obrigado companheiro.Rx.Observable.from([])
sem<Response>
. Caso contrário, obter um erro "expressão esperada".Rx.Observable.of([])
.Observable.of([])
, existe um valor emitido ([]
) e o fluxo é concluído. ComObservable.from([])
, nenhum valor é emitido, o fluxo é concluído imediatamente.Várias maneiras de criar um Observável Vazio:
Eles só diferem em como você está indo para usá-lo ainda mais (os eventos que ele irá emitir depois:
next
,complete
oudo nothing
) por exemplo:Observable.never()
- não emite eventos e nunca acaba.Observable.empty()
- emite apenascomplete
.Observable.of({})
- emite ambosnext
ecomplete
(literal de objeto vazio passado como exemplo).Use-o em suas necessidades exatas)
fonte
Você pode retornar Observable.of (empty_variable), por exemplo
fonte
Ou você pode tentar
ignoreElements()
tambémfonte
RxJS 6
você também pode usar a partir da função como abaixo:
após a importação:
fonte
Vim aqui com uma pergunta semelhante, o exemplo acima não funcionou para mim
"rxjs": "^6.0.0"
em:, a fim de gerar um observável que não emite dados que eu precisava fazer:fonte
Tente isto
fonte