Функция more()
должна возвращать Observable
запрос 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();
}
);
}
}
В этом случае я могу только сделать запрос , если hasMore()
это правда, то я получаю сообщение об ошибке на subscribe()
функции subscribe is not defined
, как я могу вернуть пустую наблюдаемый?
this.collection.more().subscribe(
(res) =>{
console.log(res);
},
(err) =>{
console.log(err);
}
)
Обновить
В RXJS 6
import { EMPTY } from 'rxjs'
return EMPTY;
javascript
typescript
rxjs
observable
Мурхаф Сусли
источник
источник
import "EmptyObservable" from "rxjs/observable/EmptyObservable";
, тогдаnew EmptyObservable<Response>();
.С новым синтаксисом RxJS 5.5+ это выглядит следующим образом:
Только одна вещь, которую нужно иметь в виду,
empty()
завершает наблюдаемое, поэтому оно не сработаетnext
в вашем потоке, а только завершится. Так что, если у вас есть, например,tap
они могут не получить триггер, как вы хотите (см. Пример ниже).Принимая во внимание, что
of({})
создаетObservable
и выдает затем со значением,{}
а затем завершаетObservable
.Например:
источник
of()
поверитьof('foo')
испускает и завершает наблюдаемое немедленно. rxviz.com/v/0oqMVW1otake(1)
удален для лучшего ответа. @MatthijsWessels, да и нет, только что проверил это сейчас и, если вы это сделаетеof()
, вернет полную наблюдаемую без испусканияnext
RxJS6 (без установленного пакета совместимости)
Там теперь
EMPTY
константа иempty
функция.Observable.empty()
больше не существуетисточник
empty()
функция, вы можете сказатьimport { empty as rxEmpty }
или,import { empty as _empty }
а затем сделатьrxEmpty()
или_empty()
. Конечно, это довольно нестандартная вещь, и я на самом деле не рекомендую ее, но я уверен, что я не единственный, кто был удивлен, RxJS считает, что он достоин импорта таких функций, какof
иempty
в мое пространство имен!import { EMPTY } from "@angular/core/src/render3/definition";
что совсем не то, что вы хотите. Так что, если вы получаете странные ошибки, убедитесь, что вы не импортируете это по ошибке.Observable.empty()
на самом деле все еще существует, но не рекомендуется в пользуEMPTY
.В моем случае с Angular2 и rxjs он работал с:
источник
import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
Да, есть пустой оператор
Для машинописи вы можете использовать
from
:источник
Rx.Observable<{}>
не присваиваетсяObservable<Response>
, я пытался,Rx.Observable<Response>.empty()
но это не сработалоObservable<any>
и это сработало, спасибо, приятель.Rx.Observable.from([])
без<Response>
. В противном случае получим ошибку «выражение ожидается».Rx.Observable.of([])
.Observable.of([])
, есть одно значение emitted ([]
) и поток завершается. ПриObservable.from([])
отсутствии значения поток завершается немедленно.Несколько способов создать Пустую Наблюдаемую:
Они просто отличаются от того, как вы собираетесь использовать его в дальнейшем (какие события он будет излучать после:
next
,complete
илиdo nothing
) , например:Observable.never()
- не излучает никаких событий и никогда не заканчивается.Observable.empty()
- излучает толькоcomplete
.Observable.of({})
- испускает обаnext
иcomplete
(пустой литерал объекта передан в качестве примера).Используйте его на свои нужды)
источник
Вы можете вернуть Observable.of (empty_variable), например
источник
Или вы можете попробовать ,
ignoreElements()
как хорошоисточник
RxJS 6
Вы можете использовать также из функции, как показано ниже:
после импорта:
источник
Пришел сюда с похожим вопросом, вышеописанное не сработало для меня:
"rxjs": "^6.0.0"
для того, чтобы сгенерировать наблюдаемое, которое не выдает данных, которые мне нужно было сделать:источник
Попробуй это
источник