Глядя на исходный код, статическая функция 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
, которые могут бытьактуально для будущих читателей: