HTTP-запрос как Observables

Я новичок в angular 2 и Observable. У меня есть функция getCurrentUserDetails() как служба, которая возвращает наблюдаемое с подробностями текущего пользователя. Я использую это при каждом доступе к маршруту.

Я хочу ограничить свой HTTP-запрос к базе данных каждый раз, когда я обращаюсь к этой функции.

Я хочу создать функцию, которая возвращает данные, если они доступны, иначе создайте http-запрос, получите данные и верните эти данные.

Ниже приведен код, который я пробовал:

private currentUser: any;
getCurrentUserDetails(){

        if(!this.currentUser){
            this.currentUser = this._http.get('getcurrentuserdetails').map((res:Response) => res.json()).share();
            return this.currentUser;
        }
        else {
            return this.currentUser;
        }
    }

person Kailash Chandra    schedule 19.03.2017    source источник


Ответы (1)


Я думаю, вы хотите сделать что-то подобное вместо оператора share():

publishReplay()->refCount()->take(1)

Это означает, что каждый раз, когда вы подписываетесь на этот Observable, вы будете получать кешированное значение, а оператор take(1) немедленно завершит цепочку, не подписываясь на источник и не вызывая дополнительных HTTP-запросов.

person martin    schedule 19.03.2017