首页 > 解决方案 > share() 在 Angular HTTP 调用中不起作用

问题描述

我刚刚注意到我的 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'

标签: angularrxjs

解决方案


您需要pipe在 Angular 6+ 中按如下方式使用运算符而不是链接:

例子 -

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';

推荐阅读