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

embedded/2024/9/25 20:36:32/

路径 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.ppmy.cn/embedded/112144.html

相关文章

外国车牌字符识别与分类系统源码分享

外国车牌字符识别与分类检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Co…

机器学习,深度学习,AGI,AI的概念和区别

1. 人工智能&#xff08;AI&#xff09;的定义与范围 1.1 AI的基本概念 人工智能&#xff08;AI&#xff09;是指通过计算机系统模拟人类智能的技术和科学。AI的目标是创建能够执行通常需要人类智能的任务的系统&#xff0c;如视觉识别、语音识别、决策制定和语言翻译。AI的核…

css scrollbar-width: none 隐藏默认滚动条

.table-box{ flex: 1; overflow-y: scroll; scrollbar-width: none;} scrollbar-width: none; 隐藏默认滚动条

STM32获取温度3种方法

在STM32微控制器上直接获取CPU温度并不像在一些包含内置温度传感器的高端微处理器&#xff08;如某些ARM Cortex-A处理器&#xff09;上那样直接。STM32微控制器通常不内置专门的温度传感器。不过&#xff0c;你可以通过几种方法来估算或测量与CPU温度相关的数据。 方法一&…

鸿蒙交互事件开发04——手势事件

1 概 述 手势事件是移动应用开发中最常见的事件之一&#xff0c;鸿蒙提供了一些方法来绑定手势事件。通过给各个组件绑定不同的手势事件&#xff0c;并设计事件的响应方式&#xff0c;当手势识别成功时&#xff0c;ArkUI框架将通过事件回调通知组件手势识别的结果。 …

自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)

&#xff08;七&#xff09;CILQR约束条件下的ILQR求解 CILQR&#xff08;(Constrained Iterative Linear Quadratic Regulator)&#xff09; 是为了在 iLQR 基础上扩展处理控制输入和状态约束的问题。在这种情况下&#xff0c;系统不仅要优化控制输入以最小化代价函数&#x…

fly专享

要逐步熟悉实验中的各个步骤&#xff0c;下面是详细的说明&#xff0c;包括如何下载软件以及相关操作步骤。 1. 熟悉VMware 15虚拟机的使用 步骤说明&#xff1a; 下载VMware Workstation 15&#xff1a; 打开浏览器&#xff0c;访问VMware官方网站&#xff1a;VMware Workst…

力扣--649.Dota2参议院

Dota2 的世界里有两个阵营&#xff1a;Radiant&#xff08;天辉&#xff09;和 Dire&#xff08;夜魇&#xff09; Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中&#xff0c;每一位参…