Я создаю Observable и подписываюсь на него дважды, но при этом обновление приходит только для последнего подписавшегося:
import { Observable } from "rxjs";
let observer;
let source = Observable.create(obs => observer = obs);
source.subscribe(m => console.log(`subscribe 1: ${m}`));
source.subscribe(m => console.log(`subscribe 2: ${m}`));
observer.next("hello!:)");
Я ожидал увидеть в консоли:
subscribe 1: hello!:)
subscribe 2: hello!:)
Но вместо этого получил только последнее сообщение:
subscribe 2: hello!:)
Можно ли сделать много подписок на одно событие?
Если да, то как это сделать?
Если добавить лог в callback:
let source = Observable.create(obs => {
console.log('callback');
observer = obs;
});
можно заметить, что он будет вызываться при каждом вызове subscribe
.
Соответственно, при каждом вызове будет переписана глобальная переменная, в которой сохранится последнее значение.
Для решения можно воспользоваться методом share
let source = Rx.Observable.create(obs => observer = obs).share();
В этом случае один наблюдатель будет для всех подписок.
Пример
Альтернативным решением может стать использование Subject
вместо Observable.create
let source = new Subject();
source.subscribe(m => console.log(`subscribe 1: ${m}`));
source.subscribe(m => console.log(`subscribe 2: ${m}`));
source.next("hello!:)");
Пример
Есть две таблицы (brands и symbols) c полями (brand,num и symb,number соответственно) (Взял для примера несколько строк, на самом деле их гораздо больше)
здравстуйте, хочу сделать сайт со следующими друг за другом вопросами, отвечаешь на один вопрос, на том же месте появляется другой, но без...
В макете есть две картинки, которые смотрятся на 1920 экранах отлично, а на экранах 1366 они сливаются в одну картинку(использую сетку bootstrap)Как...