我有一个方法需要检查是否设置了cookie,如果没有设置cookie,那么它需要进行http调用以返回cookie的值,然后在继续执行我的代码之前设置它。这一切都很好,但如果设置了cookie我不需要进行http调用我可以继续执行我的代码。
问题是我不知道如何创建一个方法来返回一个observable而不调用像http.get这样的本地可观察方法。
private getAuthCookie(): Observable<any> {
if (!this.hasCookie('oauth2')) {
return this.http.get(address)
.map((res: Response) => {
this.setCookie('oauth2', res);
return res
}
} else {
return this.getCookie('oauth2');
// complete the observable some how so that this.getAuthCookie().map() is a valid function
}
}
private get(address: string, callback: any) {
this.getAuthCookie()
.map((token: Response) => {
this.http.get(address, { headers: 'Bearer ' + token })
.map(callback)
});
}
答案 0 :(得分:2)
你可以像以下一样返回Observable:
private setAuthCookie(): Observable<any> {
if (!this.hasAuthCookie()) {
return this.http.get(address)
.map((res: Response) => {
this.setCookie('oauth2', res);
return res
}
} else {
return Observable.of<any>();
}
}
答案 1 :(得分:0)
为什么不移动对方法之外存在的cookie的检查,因为setAuthCookie()只执行一项操作,并且仅在未设置cookie时调用。
实施例。
private getCookie(name: string) {
if (!this.hasAuthCookie()) {
var setCookie = setAuthCookie();
//Do whatever you need to do with the returned observable
} else {
//Cookie exists, get cookie however you want
}
}
private setAuthCookie(): Observable<any> {
return this.http.get(address)
.map((res: Response) => {
this.setCookie('oauth2', res);
return res
}
}