【问题标题】:Wait for singleton service result before continuing - Angular在继续之前等待单例服务结果 - Angular
【发布时间】:2019-04-25 15:03:20
【问题描述】:

我有一个单例服务,它只是从端点获取用户。 然后在需要的地方将用户注入到每个组件中。 问题是在依赖于用户值的组件中还有其他函数要执行(即在执行所述函数之前等待用户值)。

如何在继续之前“等待”服务的值?这种等待显然只在应用程序的初始加载时是必需的,而单例已经为后续组件提供了它的实例。

服务组件:

userDetails:IEmployee = {};
constructor(private service: ServiceCaller) {  
this.User().subscribe((x) => {
    this.userDetails = x;
    });
}
public User():Observable<IEmployee> {
    if(this.userDetails == undefined){
        return this.service.get('/some/url')
            .map((resp: IResponse) => {
                return resp.Response
            });
    }
    else {
        //How to return an observable of this.userDetails?
            let obs = Observable.create((observer:any) => {
                observer.next(this.userDetails);
            });
            return obs;
        }
    }
}

其他组件:

this.userService.User().subscribe((x) => {
    //result empty
});

我不完全确定我是否正确地处理了这个问题,但我们将不胜感激。

【问题讨论】:

    标签: angular typescript observable


    【解决方案1】:

    我认为您可以在服务的构造函数中调用this.User()。 只需在您的类中定义一个变量userDetails,就像您已经拥有的一样,并拥有您的User() 方法,例如:

    public User():Observable<IEmployee> {
        if(this.userDetails === undefined){
            return this.service.get('/some/url')
                .do((resp: IResponse) => {
                     this.userDetails = resp.Response
                })
                .map((resp: IResponse) => {
                    return resp.Response
                });
        }
        else {
            return Observable.of(this.userDetails)
        }
    }
    

    只要有任何组件订阅,如果userDetails 尚不存在,则调用将转到端点。

    【讨论】:

    • Observable.of() 是我当时正在寻找的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2020-01-15
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多