BahaviorSubject, преобразованный в Observable, не распознается как таковой - PullRequest
0 голосов
/ 24 мая 2018

У меня проблемы с преобразованием BehaviorSubject логического значения в «правильную» наблюдаемую.
Фон:
У меня есть метод toValue (), который принимает разные типы и преобразует их вединый формат.Наблюдаемые также должны быть распознаны и напечатаны как таковые, что до сих пор работает.

Чтобы отреагировать на изменение логического значения, я реализовал ответ @ pashozator в следующем reddit-link .Таким образом, я передаю методу toValue () метод BehaviorSubject.asObservable (), который выглядит примерно так:

private isFinished: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);

toValue(this.isFinished.asObservable());

this.isFinished.next(true);

в методе toValue () преобразованный объект BehaviorSubject не распознается как Observable, BehaviorSubject или Subject,поэтому я не могу набрать его как Наблюдаемый.

Единственное отличие между "реальным" наблюдаемым и объектом из BehaviorSubject заключается в том, что атрибут source не Observable, а BehaviorSubject.

// inside toValue()
//...

console.log(param instanceof Observable);      // false for isFinished.asObservable()
console.log(param instanceof BehaviorSubject); // false for isFinished.asObservable()
console.log(param instanceof Subject);         // false for isFinished.asObservable()

if (param instanceof Observable) {
    observable = (param as Observable<T>);
}

// ...

Почему преобразованный объект поведения не распознается как наблюдаемый, и как можно распознать и обработать преобразованный объект поведения как наблюдаемый?Цель должна состоять в том, чтобы оба случая («реальные» и преобразованные наблюдаемые) обрабатывались немедленно и на них можно было подписаться позже.


РЕДАКТИРОВАТЬ:

Здесь работает plunkr, код находится внутри функции init app.component

https://plnkr.co/edit/MDxGS5kNgYNJaPmOaGXe?p=info

1 Ответ

0 голосов
/ 24 мая 2018

asObservable возвращает Observable экземпляр , как следует из названия.Это наблюдаемое.param instanceof Observable === false предполагает, что это вообще не наблюдаемый (может быть неопределенный) или Observable класс не совпадает с классом, который был импортирован в этом модуле.

Может быть больше, чемодна копия пакета RxJS в проекте.Это может быть желательной вещью или нет.В этом случае может помочь дедупликация пакета rxjs.

В любом случае, более простой способ проверить, является ли он наблюдаемым, - это использовать подход, используемый в пакете is-observable.Учитывая, что приложение имеет полифилы ES6, включая Symbol, абстракции не нужны.Это:

if (param && param[Symbol.observable]) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...