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

  • 相关阅读:
    UWA 技术分享连载 转载
    移动游戏加载性能和内存管理全解析 学习
    英语书籍阅读
    2017年6月
    Unity 官方文档学习
    YAML Class ID Reference
    Unity Blog 学习
    希腊字母
    2017年5月
    转载:书籍
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/15362842.html
Copyright © 2011-2022 走看看