我可以订阅一个正在初始化的变量吗?

时间:2019-06-19 14:37:57

标签: javascript rxjs

我想在特定变量初始化时得到通知。

类似这样的东西。

var name;

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

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

有什么已知的方法吗?

2 个答案:

答案 0 :(得分:1)

最近的是一个BehaviorSubject,但是您将无法使用语法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>

答案 1 :(得分:1)

如果您无法控制将值设置为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,它将仅发射一次-在UNION ALL获得值之后