【问题标题】:Angular4 Rxjs Observable Limit Backend HTTP RequestsAngular4 Rxjs 可观察限制后端 HTTP 请求
【发布时间】:2017-05-27 20:29:10
【问题描述】:

我试图限制我的应用程序中不必要的 HTTP 调用的数量,但每次我订阅 Observable 时都会向服务器发出请求。有没有办法在不触发 http 请求的情况下订阅 observable?我在服务中的 observable 看起来像这样:

getServices(): Observable<Service[]> {
    return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err);
}

然后在我的组件中,我像这样订阅那个 observable:

this.serviceService.getServices().subscribe(services =&gt; this.services = services);

我想要实现的是以某种方式将数据存储在服务本身上(这样我就可以在整个应用程序中使用该数据,而无需分别对每个组件发出请求,但我也想知道何时收到该数据按组件(我通常通过订阅来完成)。

【问题讨论】:

  • ... 就是不调用触发请求的函数? <.>
  • 我订阅它是因为我想要它提供的相同数据......现在我创建了一个解决方法并将“this.services”放在一个主题中,并从该主题中创建了一个可观察的。

标签: javascript angular http rxjs


【解决方案1】:

不确定我是否正确理解了您的问题,但您似乎想在服务中缓存第一个 HTTP 请求的结果,因此如果第一个组件获取数据,第二个组件(另一个订阅者)将检索缓存的数据。如果是这种情况,请在模块级别声明一个服务提供者,以便 Angular 创建一个单例对象。然后在服务内部创建一个 var 来存储第一次检索后的数据。

@Injectable()
export class DataService{

    mydata: Array<string>[];

    constructor(private http:Http){}

    getServices(): Observable<string[]> {
        if (this.mydata){
            return Observable.from(this.mydata);  // return from cache
        } else
        {
            return return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2017-10-15
    • 2019-07-15
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2016-05-17
    相关资源
    最近更新 更多