【问题标题】:Angular - Observable similar to http.get but without requestAngular - Observable 类似于 http.get 但没有请求
【发布时间】:2017-07-17 20:29:57
【问题描述】:

我有这个可观察的 http 请求

refreshToken() {
    return this.http.get(this.siteService.apiDomain() + '/api/token?token=' + localStorage.getItem('JWToken'), {})
        .map((response: Response) => {
            return response;
        })
}

我这样称呼可观察者

return this.refreshTokenService.refreshToken()
                .flatMap((result: any) => {
                    // if got new access token - retry request
                    if (JSON.parse(result._body).token) {
                        localStorage.setItem('JWToken', JSON.parse(result._body).token);
                    }
                    this.setHeaders(url);
                    return this.request(url, options);
                })

我的问题是,如果我有多个并行请求,我会多次执行 refreshToken()。我想找到一种方法来进行虚假的 http 调用,并返回我已经知道的令牌或什么都不返回。

Observable.empty() // Failed to compile (Type '{}' is not assignable to type 'Response'.)
Observable.empty().filter(() => {return true}) // Compiles but it stop the flatMap sequence.

【问题讨论】:

    标签: angular angular-observable


    【解决方案1】:

    我不确定我是否完全理解,但也许你想要Observable.of()

    这是我使用它的一个例子。如果 Id 为 0,则返回一个初始化的产品作为 Observable。

    import 'rxjs/add/observable/of';
    ...
    
    getProduct(id: number): Observable<IProduct> {
        if (id === 0) {
            return Observable.of(this.initializeProduct());
        };
        const url = `${this.baseUrl}/${id}`;
        return this.http.get(url)
            .map(this.extractData)
            .do(data => console.log('getProduct: ' + JSON.stringify(data)))
            .catch(this.handleError);
    }
    

    【讨论】:

      【解决方案2】:

      我建议使用 BehaviourSubjects,它允许您存储最后一个值,直到组件被破坏或您面临它发生变化。同样当 BehaviourSubject 的值发生变化时;每个订阅它的组件也会收到新数据。另外,作为一个额外的好处,您不需要在每次组件想要获取像 Observable 这样的值时调用服务器,因为它存储了值,您可以随时获取值而无需调用服务器。 BehaviourSebject example

      【讨论】:

        猜你喜欢
        • 2019-01-01
        • 2019-02-07
        • 2014-01-11
        • 2023-03-20
        • 2020-08-29
        • 1970-01-01
        • 1970-01-01
        • 2015-05-25
        • 1970-01-01
        相关资源
        最近更新 更多