Angular2 Http 双订阅

Angular2 Http double subscribe

是否可以调用Subscribe方法两次?

我正在尝试构建 api 工厂,它在工厂中保存数据,但不同的组件可以在每次 ajax 调用时使用该数据。

工厂

export class api {

    result = [];

    constructor (protected http: Http) { }

    getData ()
    {
        return this.http.get('./friends.json').map((res: Response) => res.json()).subscribe(res => this.result = res);
    }
}

测试组件,再次调用subscribe方法

export class TestPage {

    showListResult; 

    constructor (protected api: api) {

        this.api.getData().subscribe(res => this.showListResult = res)
    }

}

您可以return 新的 Observable 包装器。这样的事情应该有效:

import {Observable} from 'rxjs/Observable'

export class api {

    result = [];

    constructor (protected http: Http) { }

    getData () {
        return new Observable(observer => {
            this.http.get('./friends.json')
                .map((res: Response) => res.json())
                .subscribe(res => {
                    this.result = res;
                    observer.next(res);
                    observer.complete();
                });
        });
    }
}

如果您想发出一次 HTTP 请求,并将结果共享给多个订阅者,那么我建议使用可连接的观察者来发布和重播最后发出的值:

this.observable = http.get('...').map(t=> t.json()).publishReplay().refCount();

每个新订阅者都将重播最后发出的值,而无需发出新的 HTTP 请求。

Demo Plnkr

此答案与此相似