Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度-可观察,类似于http.get,但没有请求_Angular_Angular Observable - Fatal编程技术网

Angular 角度-可观察,类似于http.get,但没有请求

Angular 角度-可观察,类似于http.get,但没有请求,angular,angular-observable,Angular,Angular Observable,我有一个可观察的http请求 refreshToken() { return this.http.get(this.siteService.apiDomain() + '/api/token?token=' + localStorage.getItem('JWToken'), {}) .map((response: Response) => { return response; }) } 我这样称呼可观察物 return t

我有一个可观察的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.

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

下面是我使用它的一个例子。如果Id为0,则返回一个初始化的产品作为可观察产品

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);
}
导入'rxjs/add/observable/of';
...
getProduct(id:编号):可观察{
如果(id==0){
(this.initializeProduct())的可观察返回值;
};
常量url=`${this.baseUrl}/${id}`;
返回此.http.get(url)
.map(此.extractData)
.do(数据=>console.log('getProduct:'+JSON.stringify(数据)))
.接住(这个.把手错误);
}

我建议使用Behavior Subjects,它将允许您存储最后一个值,直到组件损坏或您面临更改。当行为主体的价值发生变化时;每个订阅它的组件也会接收新数据。另外,作为一个额外的好处,您不需要每次调用服务器,因为组件想要获得像Observable这样的值,因为它存储了值,所以您可以随时获得值,而无需调用服务器。