2016-09-20 146 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的功能和类别很大,我完全失去了! –