首页 文章

多个可观察量的RXJS序列

提问于
浏览
1

我试图绕过RXJS并且有一个关于如何使用observable而不是promises来解决以下工作流的快速问题 .

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

  • 我在JWT的本地存储中查找 . 如果JWT存在,我返回令牌 .

  • 如果不在本地存储中我检查以查看平台 . 如果Android i使用google bearer token登录我的服务器,我的服务器将返回一个JWT(通过角度HTTP obserable) .

  • 如果不在本地存储中且平台是Windows计算机我在我的服务器上生成JWT并返回(通过角度HTTP可观察)

  • 对于服务器的两次调用我想在将JWT信息返回给调用函数之前将令牌缓存在本地存储中 .

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

任何帮助都会很棒!

1 回答

  • 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();
    }
    
    ...
    

    此代码甚至可确保在一次调用两次时不会发出多个网络请求 .

相关问题