2016-10-26 19 views
1

我有一個方法需要檢查cookie是否設置,如果沒有設置cookie,則需要進行http調用以返回cookie的值,然後設置它在繼續執行我的代碼之前。這一切都很好,但如果設置了cookie,我不需要進行http調用,我可以繼續執行我的代碼。如何手動返回observable而不做任何事

問題是我不知道如何創建一個方法返回一個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()做的只有一件事,並且只能稱爲檢查當cookie沒有設置時。

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