当前位置: 首页 > article >正文

Superset二次开发之源码asyncEvent.ts 分析

路径 superset-frontend/src/middleware/asyncEvent.ts

`asyncEvent.ts` 文件主要负责处理 Superset 中的异步事件。

它实现了一个中间件,用于管理异步查询的状态和结果,支持两种传输方式:轮询(polling)和 WebSocket(ws)。该文件的核心功能包括:

- 监听和处理异步事件。
- 通过 API 获取异步事件的状态和结果。
- 管理事件的监听器和重试机制。
- 处理 WebSocket 连接和消息。

import {
  ensureIsArray,
  isFeatureEnabled,
  FeatureFlag,
  makeApi,
  SupersetClient,
  logging,
} from '@superset-ui/core';
import { SupersetError } from 'src/components/ErrorMessage/types';
import getBootstrapData from 'src/utils/getBootstrapData';
import {
  getClientErrorObject,
  parseErrorJson,
} from '../utils/getClientErrorObject';
 
type AsyncEvent = {
  id?: string | null;
  channel_id: string;
  job_id: string;
  user_id?: string;
  status: string;
  errors?: SupersetError[];
  result_url: string | null;
};
 
type CachedDataResponse = {
  status: string;
  data: any;
};
type AppConfig = Record<string, any>;
type ListenerFn = (asyncEvent: AsyncEvent) => Promise<any>;
 
const TRANSPORT_POLLING = 'polling';
const TRANSPORT_WS = 'ws';
const JOB_STATUS = {
  PENDING: 'pending',
  RUNNING: 'running',
  ERROR: 'error',
  DONE: 'done',
};
const LOCALSTORAGE_KEY = 'last_async_event_id';
const POLLING_URL = '/api/v1/async_event/';
const MAX_RETRIES = 6;
const RETRY_DELAY = 100;
 
let config: AppConfig;
let transport: string;
let pollingDelayMs: number;
let pollingTimeoutId: number;
let listenersByJobId: Record<string, ListenerFn>;
let retriesByJobId: Record<string, number>;
let lastReceivedEventId: string | null | undefined;
 
const addListener = (id: string, fn: any) => {
  listenersByJobId[id] = fn;
};
 
const removeListener &#

http://www.kler.cn/news/306176.html

相关文章:

  • 嵌入式C语言自我修养:C语言的面向对象编程思想
  • 问题 H: 三角数
  • 【在Linux世界中追寻伟大的One Piece】五种IO模型和阻塞IO
  • 13. 神经网络基本骨架--nn.Module
  • 长业务事务的离线并发问题
  • 9. 什么是 Beam Search?深入理解模型生成策略
  • leetcode 难度【简单模式】标签【数据库】题型整理大全
  • 【网络安全的神秘世界】渗透测试基础
  • 【C#】添加临时环境变量
  • linux第二课(docker的安装使用)
  • 微软九月补丁星期二发现了 79 个漏洞
  • 《ImageNet Classification with Deep Convolutional Neural Networks》论文导读
  • 漫画元素检测系统源码分享
  • AutoSar AP通信的事件订阅
  • Playwright与Selenium的对比:谁是更适合你的自动化测试工具?
  • 通俗理解低秩分解
  • 【webpack4系列】设计可维护的webpack4.x+vue构建配置(终极篇)
  • (182)时序收敛--->(32)时序收敛三二
  • 如何通过网络找到自己想要的LabVIEW知识?
  • Pocketpair澄清表示《幻兽帕鲁》无意转型免费游戏
  • 儿童编程与AI辅助编程:未来教育的机遇与挑战
  • 窗口框架frame(HTML前端)
  • 福建科立讯通信 指挥调度管理平台 SQL注入漏洞
  • 【算法篇】哈希类(笔记)
  • Ubuntu 不重装系统增加交换空间大小
  • 我的IP地址经常变化对我的账号安全有影响吗?
  • 【STM32】DAC数字模拟转换
  • SSM框架学习(三、MyBatis实践:提高持久层数据处理效率)
  • Python Pandas轻松处理大规模类别数据
  • html加载页面