rxjs Subject.create устарел - что я должен использовать вместо этого? - PullRequest
2 голосов
/ 06 апреля 2019

У меня есть этот код в службе в моем приложении Angular:

const subby = Subject.create(observer, observable)

Но моя IDE правильно помечает Subject.create как устаревшее. Что я должен использовать вместо спасибо? Я пробовал new Subject(observer, observable), но не радости. ТИА.

Версия RxJS: 6.4.0

Угловая версия: 7.2

Ответы [ 2 ]

2 голосов
/ 06 апреля 2019

Глядя на исходный код, статическая функция Subject.create(destination, source) является просто оболочкой для new AnonymousSubject<T>(destination, source).

Если вы просто хотите разобраться с предупреждением, вы можете изменить свой код на

import { AnonymousSubject } from 'rxjs/internal/Subject';

const subby = new AnonymousSubject<T>(observer, observable);

RxJs задокументировали свою мотивацию для этого изменения здесь .Важная цитата:

Subject.create на самом деле не создает Subject, а скорее AnonymousSubject, который я ДЕЙСТВИТЕЛЬНО хотел бы переименовать в FrankenSubject, потому что он описывает, что это такое, вы в основном склеиваете ObserverНаблюдаемому и назовите его «Субъектом».

Короче говоря, использование Subject.create (или объекта AnonymousSubject) - сбивающий с толку способ достижения ваших целей.

Вы можете посмотреть исходный код этого класса здесь , но суть в том, что это бессмысленный класс, который запутывает происходящее.В коде вы можете видеть, что destination и source (аргументы Observer и Observable) НЕ имеют взаимодействия.

Таким образом, «правильный способ» исправить код - это убитьэтот объект целиком и более подробно о том, как соответствующие события маршрутизируются.

Например:

// This code...
const subby = Subject.create(observer, observable);
subby.subscribe((value: value) => console.log(value));
subby.next("Test");

// Should be replace by this code
// Nothing
observable.subscribe((value: value) => console.log(value));
observer.next("Test");

Я также нашел следующие предупреждения об использовании Subject.create, которые могут бытьактуально для будущих читателей:

1 голос
/ 06 апреля 2019

Субъект не примет никаких аргументов при создании.Поэтому вам нужно инициализировать его как (new Subject()).После этого вы можете использовать следующий метод для выдачи значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...