Прежде чем продолжить, дождитесь результата одноэтапного обслуживания - Angular - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть одноэлементная служба, которая просто получает пользователя от конечной точки. Затем пользователь вводится в каждый компонент, где это необходимо. Проблема состоит в том, что существуют другие функции, которые должны выполняться в компонентах, которые зависят от значения пользователя (то есть ждут значения пользователя перед выполнением указанных функций).

Как я могу "дождаться" значения от службы, прежде чем продолжить? Это ожидание, очевидно, будет необходимо только при начальной загрузке приложения, в то время как у синглтона уже будет свой экземпляр для последующих компонентов.

Сервисный компонент:

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
});

Я не совсем уверен, правильно ли я подхожу к этому, но помощь будет оценена.

1 Ответ

0 голосов
/ 25 апреля 2019

Я думаю, вы можете избежать вызова 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 не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...