我想在特定变量初始化时得到通知。
类似这样的东西。
var name;
// magic happens here
initialization(name).subscribe(_name => {...});
setTimeout(_ => {
name = 'foo';
}, 1000);
有什么已知的方法吗?
答案 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
获得值之后