2016-09-20 145 views
1

我想繞過RXJS我的頭,並有一個關於如何使用observables而不是承諾解決以下工作流的快速問題。RXJS序列多個可觀察到的

這裏是角2日誌中的工作流程:

  • 我期待在JWT本地存儲。如果JWT存在,我會返回令牌。
  • 如果不在本地存儲我檢查看到的平臺。如果Android我使用谷歌載體令牌登錄到我的服務器,我的服務器返回一個JWT(通過角度HTTP obserable)。
  • 如果不是在本地存儲和平臺是Windows電腦我生成我的服務器和返回上一個智威湯遜(通過角HTTP obserable)
  • 兩個呼叫服務器,我想之前緩存在本地存儲令牌將JWT信息返回給調用函數。

我擁有了所有的東西如何正確使用RXJS,主要是如何將所有這些鏈接在一起。如何使用Observables獲得快速僞代碼?我基本上想攔截JWT並存儲在本地存儲中,然後在應用程序中繼續(訂閱上述順序的調用函數)

任何幫助都會很棒!

回答

1

我更喜歡這個任務的異步函數。

var jwtPromise = null; 

function getJwt() { 
    return jwtPromise || (jwtPromise = getJwtNotCached()); 
} 

async function getJwtNotCached() { 
    const localJwt = getLocalJwt(); 
    if (localJwt) { 
    return localJwt; 
    } 
    const newJwt = await fetchJwtByPlatform(); 
    storeLocalJwt(newJwt); 
    return newJwt; 
} 

async function fetchJwtByPlatform() { 
    if (platformIsAndroid()) { 
    return await fetchJwtOnAndroid(); 
    } 
    return await fetchJwtOnWindows(); 
} 

... 

如果一次調用兩次,此代碼甚至可以確保不會發出多個網絡請求。

+0

感謝您的回覆。這將工作與角2 HTTP,因爲它返回observables?我可以使用await對angular 2 HTTP調用返回的observable進行操作嗎? –

+0

@RickyFunkhouser不,你可以'awaipa observable.toPromise();'。這就是爲什麼我非常傷心angular2 http返回observables。 –

+0

好吧,我想至少試用這個使用observables,所以我可以弄清楚如何正確使用它們。我可以用承諾做到這一點,但我覺得我正在繞角度2想要我做事情。我能找到的大多數可觀察的例子都使用了一組數字上的範圍函數,這對我沒有任何幫助。我想找到一些例子,其中多個observable可以合併成單個結果(JWT),同時可能會在返回到調用函數之前處理可觀察的響應。 RXJS的功能和類別很大,我完全失去了! –