2016-10-26 12 views
1

クッキーが設定されているかどうかをチェックする方法があります。クッキーが設定されていない場合、クッキーの値を返すようにhttpコールを行い、コードを実行する前にこれは大丈夫ですが、クッキーが設定されている場合は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

あなたが返すことができる観察可能なように:

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>(); 
    } 
} 
+0

これは、質問のタイトルに対する受け入れられた回答である必要があります。 UIの開発中にhttp呼び出しを模擬するのに便利です。 – msanford

0

は、なぜあなたは、道のsetAuthCookieは()だけ一つのことをやっているだけに呼び出されるメソッドのクッキー既存の外のチェックを移動しないでくださいクッキーが設定されていない場合

Ex。

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 
     } 
} 
+1

私はコードをクリーンアップし、テスト容易性を向上させたこの方向に傾いていました。 – efarley

関連する問題