【问题标题】:share() not working in Angular HTTP callsshare() 在 Angular HTTP 调用中不起作用
【发布时间】:2019-03-12 07:27:27
【问题描述】:

我刚刚注意到我的 HTTP 调用不再在组件之间共享。 我不确定从哪个版本开始。

已经检查过这个解决方案: Angular2 observable share is not working

这让问题变得更糟(更多的 HTTP 调用),我必须承认我一直很难理解 rxjs。

这是我的服务功能:

getSomeData(): Promise < any > 
{
    if(this.data) // should keep service from doing extra http for the same request
    {
        return Promise.resolve(this.data);
    }
    else
    {
        return this.http.post(this.createURL('getData',{}),JSON.stringify({}), this.createGetOptions())
            .timeout(environment.timeout)
            .share()
            .map((response: Response) => {
                return response;
            }).toPromise();
    }
}

我从不同的组件中调用它

this.service.getSomeData().then((data: any) => 
{
    if (data) {
   ...

createGetOptions 只是添加像'Content-Type': 'text/plain; charset=UTF-8' 这样的标题

【问题讨论】:

  • 您是在组件级别还是模块级别或根级别提供服务?是否所有组件都属于同一个模块?

标签: angular rxjs


【解决方案1】:

您需要在 Angular 6+ 中使用 pipe 运算符,如下所示,而不是链接:

示例 -

getSomeData(): Promise < any > 
{
    if(this.data) // should keep service from doing extra http for the same request
    {
        return Promise.resolve(this.data);
    }
    else
    {
     return this.http.post(this.createURL('getData',{}),JSON.stringify({}), this.createGetOptions()).pipe(
                timeout(environment.timeout),
                share(),
                map((response: Response) => {
                    return response;
                })).toPromise();
    }
}

还要确保您按如下方式导入共享:

import {share} from 'rxjs/operators';

【讨论】:

  • 我不是问这个问题的人,我只是在评论我的方式:)
  • 它不起作用:-(,和以前一样,服务多次发出http请求
【解决方案2】:

看看我的库 ngx-RxCache。我就是为了这种东西写的。

https://medium.com/@adrianbrand/angular-state-management-with-rxcache-468a865fc3fb

【讨论】:

  • 为什么需要一个库,而它是 rxjs 的典型用例,并且在以前版本的 angular 中得到支持?
  • 如果你想知道这个问题的答案,我在这里写了一篇关于图书馆的文章medium.com/@adrianbrand/…
猜你喜欢
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-24
相关资源
最近更新 更多