如何在不做任何事情的情况下手动返回observable

时间:2016-10-26 17:41:50

标签: angular observable

我有一个方法需要检查是否设置了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)
    });
}

2 个答案:

答案 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
      }
}