zoukankan      html  css  js  c++  java
  • cube.js 基于http 通道的数据实时更新bug 解决

    这个问题的原因核心还是官方在处理网络异常的是否没有进行异常处理,造成基于循环的数据获取处理了问题

    参考代码

    因为cube.js 实现了不同的transport http 的包含了http 的,ws 的包含了ws 的
    http 的处理

     
    class HttpTransport {
      constructor({ authorization, apiUrl }) {
        this.authorization = authorization;
        this.apiUrl = apiUrl;
      }
     
      request(method, params) {
        const searchParams = new URLSearchParams(
          params && Object.keys(params)
            .map(k => ({ [k]: typeof params[k] === 'object' ? JSON.stringify(params[k]) : params[k] }))
            .reduce((a, b) => ({ ...a, ...b }), {})
        );
     
        const runRequest = () => fetch(
          `${this.apiUrl}${method}?${searchParams}`, {
            headers: { Authorization: this.authorization, 'Content-Type': 'application/json' }
          }
        );
     
        return {
          async subscribe(callback) {
            const result = await runRequest();
           // 处理是问题的所在,如果runRequest 异常了,会造成后续基于递归的请求不能使用
            return callback(result, () => this.subscribe(callback));
          }
        };
      }
    }

    解决方法

    • subscribe 部分对于异步请求支持try catch
    • runRequest 部分catch 异常处理

    以下主要说明关于subscribe的

    async subscribe(callback) {
            let result={
              error:"error"
            };
            try{
               result = await runRequest();
            } 
            finally{
              return callback(result, () => this.subscribe(callback));
            }
          };

    说明

    临时的使用方法是先编译修改,之后copy 编译的文件到cube.js 项目中,包含dist,以及src

    参考资料

    https://github.com/cube-js/cube.js/issues/3493

  • 相关阅读:
    1221D
    1249E
    D. Yet Another Monster Killing Problem
    大佬传送门
    Zookeeper客户端连接报错
    搭建PXC集群
    Docker分布式环境
    Docker使用
    Docker入门
    MySQL数据库集群概述
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/15362842.html
Copyright © 2011-2022 走看看