RxJs Тема: получить эмиттер - PullRequest
0 голосов
/ 25 июня 2018

Я работаю с предметами, и в классе есть .subscribe().Из других классов я передаю значения этому классу.Проблема в том, что подписка теперь запускается несколько раз, и я не знаю, откуда исходят эмиссии.

Есть ли способ получить класс или ссылку, откуда был эмитт (.next<T>)сработало?

Желаемое поведение:

В служебных службах:

obs: Subject<Date> = new Subject<Date>();

Класс 1:

svc.obs.next(new Date());

Класс n:

svc.obs.next(new Date());

Подписчик:

svc.obs.subscribe((date) => {
        console.log("Triggered from: " + svc.obs.getSource().classname); // Desired output: "Triggered from: SomeNamespace.Classname"
});

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Чистым решением этой проблемы было бы сделать это.

Внутри вашего сервиса.

// First, declare an interface like so.
interface ReactiveDate {
    date: Date,
    type: String
}

// Instantiate the Subject using this interface as the generic type.
obs: Subject<ReactiveDate> = new Subject<ReactiveDate>();

Внутри вашего класса.

// From Class 1.
svc.obs.next({ date: new Date(), type: 'Class 1' });

// From Class 2.
svc.obs.next({ date: new Date(), type: 'Class 2' });

Затем сновавнутри вашего сервиса.

// Apply correct logic on "type" inside the subscribe callback.
obs.subscribe(({ date, type }) => {
        console.log("Triggered from: " + type);
});

Таким образом, «тип» по вашему выбору и будет очень надежным и безошибочным, так как вы всегда будете знать значения заранее.Вы не будете взламывать свой путь.

0 голосов
/ 25 июня 2018

Вы можете заменить obs: Subject<Date> = new Subject<Date>(); на obs: Subject<any> = new Subject<any>();

Тогда вы сможете самостоятельно излучать источник

svc.obs.next({ date: new Date(), source: 'whatever source' });

Наконец-то при подписке:

svc.obs.subscribe((data) => {
        console.log("Triggered from: " + data.source + "Date is : "+data.date);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...