Observable.create()
и new Observable()
по сути делают то же самое.
Из анатомии наблюдаемой :
Rx.Observable.create
- псевдоним для Observable
constructor
, и этопринимает один аргумент: функция subscribe
.
Observable.of
, с другой стороны, это метод static
для Observable
.Он создает для вас Observable
, который выдает значения, которые вы указываете в качестве аргумента (ов) сразу один за другим, а затем отправляет полное уведомление.
Проблема с вашей реализацией:
Ваша реализация Custom Observable неверна.Когда вы new
создаете Observable, вы должны передать функцию subscribe
ее constructor
, которая имеет observer
в качестве аргумента.У этого observer
есть такие методы, как next
, error
и complete
, которые вызываются в тех конкретных экземплярах в жизненном цикле этой наблюдаемой.
Вы также должны выставить объект Subscription
у него есть метод unsubscribe
, который затем может быть использован потребителем для выполнения любой очистки.
Вот как это можно реализовать в целом:
const yourCustomObservable = new Observable((observer) => {
observer.next("This pushes new value to the consumer");
observer.error("This pushes an error to the consumer");
observer.complete();
return function unsubscribe() {
// When the consumer unsubscribes, clean up data ready for next subscription.
};
});
Для вашего конкретного случая использования вы можете использовать:
new Observable(...)
:
import { Observable } from 'rxjs';
...
someService.getMethod().pipe(
...
catchError((e) => {
// some operation
return new Observable(observer => observer.next(false));
})
)
Observable.create
:
import { Observable } from 'rxjs';
...
someService.getMethod().pipe(
...
catchError((e) => {
// some operation
return Observable.create(observer => observer.next(false));
})
)
of
:
import { of } from 'rxjs';
...
someService.getMethod().pipe(
...
catchError((e) => {
// some operation
return of(false);
})
)
from
:
import { from } from 'rxjs';
...
someService.getMethod().pipe(
...
catchError((e) => {
// some operation
return from([false]);
})
)
Естьпосмотрите на это Образец StackBlitz для ссылки
Когда использовать что?
new Observable(...)
или Observable.create(...)
дает вам более точный контроль зерна, где вы можете определить свою собственную функцию subscribe
и делать с ней все, что захотите.Поэтому вы можете захотеть использовать его для реализации пользовательских Observable, которые обычно нельзя создать с помощью методов static
, предоставленных в Observable
.Однако для простых случаев использования, подобных вашему, достаточно использовать Observable.of
или Observable.from
.