gpt4 book ai didi

angular - 如何获取最后发出的 Observable

转载 作者:太空狗 更新时间:2023-10-29 17:33:34 24 4
gpt4 key购买 nike

我已经创建了一个 Angular 服务,它基本上设置了一个包含一些用户信息的对象。当我更改用户时,该服务会发出一个可观察对象,由一些同级组件捕获以更新信息。问题是我第一次设置数据时,还没有人订阅,所以我得到了一个未定义的值。我读过有关使用 publish() 或 share() 将可观察对象转换为“热”的信息,但我对 RxJS 还很陌生,我仍然不明白它是如何在 100% 下工作的,所以我有点迷茫。

服务代码(相关部分):

getFwcUser() : Observable<FwcUser> {
return this.subjectFwcUser.asObservable();
}

setFwcUser(user : FwcUser) {
this.fwcUser = user;

this.subjectFwcUser.next(this.fwcUser);
}

注意:FwcUser 是一个带有一些用户字段的接口(interface)。我在按钮处理程序中运行 setFwcUser 以选择用户。

迟到的订阅者(组件代码):

ngOnInit() {
this.fwcUserService.getFwcUser()
.subscribe(
(user : FwcUser) => { console.log('Received: ', user); this.fwcUser = user; }
);
[......]
}

总是打印:'Received: undefined'。注意:该组件位于“*ngIf="fwcUser"”内,因此当我从同级组件调用“setFwcUser”时会加载它。

我怎样才能让这个组件读取最后一个值?

此外,有人可以推荐一个很好的资源来为初学者学习 RxJS 吗?我正在读几本关于 Angular4 的书,但没有一本能清楚地解释它......

谢谢!

最佳答案

BehaviorSubject是这里的答案。 BehaviorSubject 在 subscribe() 上发出最后一个值,而不是标准的 subject (Observable) 在值传入时发出值。您还可以使用 BehaviorSubjects getValue() 方法手动获取最后一个值。

关于下面的代码需要注意的是,BehaviorSubject 声明中的 null block 表示初始化时 BehaviorSubject 的初始值。您可以保留它,也可以用一个值预先填充它。

服务

已编辑:更正了几个打字错误。

fwcUser: BehaviorSubject<FwcUser> = new BehaviorSubject<FwcUser>(null);
fwcUser$ = this.fwcUser.asObservable();

// Set the value of the fwcUser
updateFwcUser(user) {
this.fwcUser.next(user);
}

组件

// Subscribe to the BehaviorSubject
ngOnInit() {
this.fwcUserService.fwcUser$.subscribe(_fwcUser => {
this.fwcUser = _fwcUser
}
}

// Get the current (previously emitted) value manually
getFwcUser() {
this.fwcUser = this.fwcUserService.fwcUser.getValue();
}

关于angular - 如何获取最后发出的 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com