多个可观测量的RXJS序列

时间:2016-09-20 16:51:36

标签: angularjs rxjs

我正在试图绕过RXJS并快速提出如何使用observable而不是promises来解决以下工作流程的问题。

以下是角度2中的登录工作流程:

  • 我在JWT的本地存储中查找。如果JWT存在,我返回令牌。
  • 如果不在本地存储中,我会检查平台。如果Android i使用google bearer token登录我的服务器,我的服务器将返回一个JWT(通过角度HTTP obserable)。
  • 如果不在本地存储中且平台是Windows计算机我在我的服务器上生成JWT并返回(通过角度HTTP可观察)
  • 对服务器的两次调用我想在将JWT信息返回给调用函数之前将令牌缓存在本地存储中。

我已经知道如何使用RXJS正确地执行此操作,主要是如何将所有这些链接在一起。我可以使用Observables获得一个关于如何做到这一点的快速伪代码吗?我基本上想要在应用程序中继续拦截JWT并存储在本地存储中(调用函数订阅上面的序列)

任何帮助都会很棒!

1 个答案:

答案 0 :(得分: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();
}

...

如果一次调用两次,此代码甚至可以确保不会发出多个网络请求。