Могу ли я подписаться на инициализируемую переменную? - PullRequest
0 голосов
/ 19 июня 2019

Я хочу получать уведомления, когда конкретная переменная инициализируется.

как-то так.

var name;

// magic happens here
initialization(name).subscribe(_name => {...});

setTimeout(_ => {
  name = 'foo';
}, 1000);

Есть ли какой-нибудь известный способ сделать это?

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Вы можете использовать setter, если у вас нет контроля над функциями, которые устанавливают значение для name, или если вы просто хотите избежать добавления логики к каждой из этих функций (если их много):

const _subject = new Subject();
// keep good practise and do not subscribe to Subjects:
const observable$ = _subject.asObservable();

let _name;
set name(name) {
  _name = name;
  subject.next(name);
};

// also adding a getter in case you want to use 'name' somewhere else
get name() {
  return _name;
}

// magic happens here
observable$.subscribe(_name => {...});

setTimeout(_ => {
  name = 'foo';
}, 1000);

это будет излучаться каждый раз, когда name получает значение, но вы можете для.ех.pipe(take(1)) и будет излучаться только один раз - после того, как name получит значение

1 голос
/ 19 июня 2019

Ближайшим является объект поведения, но вы не сможете использовать синтаксис name = 'foo';

const name = new rxjs.BehaviorSubject(undefined);

name.subscribe(_name => { console.log(_name) });

setTimeout(() => {
  name.next('foo');
}, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.2/rxjs.umd.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...