【问题标题】:RxJs return Observable if variable not undefined如果变量未定义,RxJs 返回 Observable
【发布时间】:2016-11-15 08:43:21
【问题描述】:

我想创建一个 getSelectedUser 方法,该方法仅在存在私有字段(不是未定义)时才返回 Observable。

private user : User

init() {
   // user = loadingUser...
}

getSelectedUser(): Observable<User> {
    // return ???
}

目标是其他组件可以订阅这个 observable 并在加载后接收用户。

有人知道我如何实现这一目标吗?

【问题讨论】:

    标签: angular rxjs5


    【解决方案1】:

    然后将 user 定义为 observable:

    private user: Subject<User> = new ReplaySubject<User>(1); // ensure that new registered component gets the last loaded user.
    
    getSelectedUser(): Observable<User> {
       return user.asObservable();
    }
    

    然后在用户准备好时更新用户:

    private someUserLoadingFunction(){
       ... retrieve user logic -> currentUser...
       this.user.next(currentUser);
    }
    

    【讨论】:

    • 非常感谢您的快速回答。它似乎工作。但是现在,我的组件应该在渲染之前等待值存在。你知道我该怎么做吗?
    • 我缺少信息,但您可以使用 *ngIf="user | async" 使其可见
    • 还有一个问题:如果我在一个组件中订阅这个主题,我会随着组件的运行而发生内存泄漏,因为我仍然订阅了这个主题。我怎样才能避免这种情况?
    • 持有一个订阅变量:let subscription = someObservable$.subscribe(...),然后在你的ngOnDestroy调用subscription.unsubscribe()
    • 我刚刚找到了这个解决方案。非常感谢您今天@Meir 的帮助。
    猜你喜欢
    • 2016-11-04
    • 2019-01-25
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2012-01-16
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多