尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

记一次大屏某一处图像采集接口异常导致该页其他图表都无法显示问题解决

记一次大屏某一处图像采集接口异常导致该页其他图表都无法显示问题解决
📅 发布时间:2026/6/19 8:04:02

问题描述:

开发的大屏有一处实时感知数据区域,用于显示采集到的机器人的实时里程计相关传感器数据,以及机器人摄像头的实时图片帧。在没有对接这个接口时,该页大屏其他图表显示正常;在正常测试对接该接口时,各区域也都能实时显示数据。

因为机器人也无法实时一直开着,所以后续后端对接处理的服务就关闭了,也就没在关注。后面偶然一次关注该页大屏时,发现其他也图表都没有显示,且该页页面卡顿。

 

问题原因:

因为图片帧对接的后端接口无法建立连接(后面核实是机器人只在测试调试时才开启了后端该接口服务,其他时候该接口服务功能(如端口)是关闭的),导致前端大屏无法发送请求,连接被拒绝,然而,js如下代码片段:

image

image

 

 1 if (usResult.code === 200 && usResult.success === true && !!usResult.data) {
 2     var requestParam = buildImageBindPayload(usResult);
 3     var urlarray = [];//存储websocket地址
 4     var channelResult;
 5     //通知构建采集通道
 6     $.ajax({
 7       type: 'POST',
 8       url: realtimedataurl + '/api/rosNodeManager/bindRos',
 9       data: JSON.stringify(requestParam),
10       contentType: 'application/json',
11       async: false,
12       success: function (res) {
13         channelResult = res;
14       },
15       error: function (xhr, status, error) {
16         console.log('Error:', error);
17         showConnectionStatus('通道地址API请求失败', 'error');
18       }
19     });
20 if (channelResult.code === 200 && channelResult.success === true && !!channelResult.data) {
21       channelResult.data.forEach((item, index) => {
22         urlarray[index] = item.websocketUrl
23       });
24       uswebsocketmode4Third(urlarray); //视频显示方法
25     } else {
26       showConnectionStatus('获取视频websocket地址失败,请检查数据采集反馈接口内容', 'error');
27     }
28 
29   }

 

因为后端服务连接无法访问,所以请求直接进入error分支,并且channelResult也是null并没有任何后端接口返回的值,然后再执行图中:

if (channelResult.code === 200 && channelResult.success === true && !!channelResult.data)时就异常报错了,因为js无法获取channelResult.code信息(channelResult非正常情况赋值,里面没有code结构),才导致页面捕获到该异常卡在该区域图表函数,而该页其他图表的函数调用顺序是在当前图片帧图表的下方(之后),导致其他图表函数就没有被调用。

 

解决办法:

 方法1:

追加一个isError变量,初始值置为false;代表没有异常,一旦请求接口进入error分支(比如连接被拒绝,未开启接口服务等),就将isError置为true;

然后在请求接口代码段下方做判断,isError为true,直接结束。

修订后代码如下:

image

image

 

 1 //-2(2)构建请求参数,并通知数据采集方采集并构建通道,接收返回的通道地址
 2   var isError = false;
 3   if (usResult.code === 200 && usResult.success === true && !!usResult.data) {
 4     var requestParam = buildImageBindPayload(usResult);
 5     //console.log('请求参数临时记忆:',JSON.stringify(requestParam));
 6     var urlarray = [];//存储websocket地址
 7     var channelResult;
 8     //通知构建采集通道
 9     $.ajax({
10       type: 'POST',
11       url: realtimedataurl + '/api/rosNodeManager/bindRos',
12       data: JSON.stringify(requestParam),
13       contentType: 'application/json',
14       async: false,
15       success: function (res) {
16         channelResult = res;
17       },
18       error: function (xhr, status, error) {
19         console.log('Error:', error);
20         isError = true;
21         showConnectionStatus('通道地址API请求失败', 'error');
22       }
23     });
24 
25     if(isError === true) return;
26 
27     if (channelResult.code === 200 && channelResult.success === true && !!channelResult.data) {
28       channelResult.data.forEach((item, index) => {
29         urlarray[index] = item.websocketUrl
30       });
31       uswebsocketmode4Third(urlarray); //视频显示方法
32     } else {
33       showConnectionStatus('获取视频websocket地址失败,请检查数据采集反馈接口内容', 'error');
34     }
35 
36   }

方法2:

最简单,不关心函数内部的异常,直接在调用最顶级函数的地方,包一下try-catch即可。

如:

try { USDisplay4Third(); } catch (e) { }
 1 // 在全局作用域定义定时器变量
 2 let paramsDisplayTimer = null;
 3 export function ThirdTab() {
 4   //
 5   $(function () {
 6     
 7     // 清除已存在的定时器
 8     if (paramsDisplayTimer !== null) {
 9       clearInterval(paramsDisplayTimer);
10       paramsDisplayTimer = null;
11     }
12     // 立即执行一次,保证第一次能立即执行
13     paramsDisplay();
14     //try { paramsDisplay(); } catch (e) { }
15 
16     // 设置新的定时器
17     paramsDisplayTimer = setInterval(function () {
18       paramsDisplay();
19       //try { paramsDisplay(); } catch (e) { }
20     }, 1000);
21 
22 
23     try { USDisplay4Third(); } catch (e) { }
24 
25 
26     //第三页无人系统介绍
27     //unmanned_system_introduce();
28     try { unmanned_system_introduce(); } catch (e) { }
29 
30     //第三页地图
31     //unmanned_system_map_openlayers();
32     try { unmanned_system_map_openlayers(); } catch (e) { }
33 
34   })
35 
36 }

 

相关新闻

  • LobeChat能否支持梦境解析?睡眠记录与心理象征意义探讨
  • Linly-Talker开源教程:打造会说话的AI虚拟人
  • Flutter:在流动的 UI 中,重新理解“界面”的意义

最新新闻

  • 2026 年 6 月昆明手表回收哪家强?红榜门店榜单出炉 - 讯息早知道
  • 基于MODBUS通信的台达B2伺服速度模式远程控制实践
  • Windows热键冲突终极指南:快速找出谁“偷走“了你的快捷键
  • 如何快速解决AutoCAD字体缺失问题:FontCenter插件的完整指南
  • 福州闲置黄金变现门店实测,无隐形扣费支持百万秒到账 - 讯息早知道
  • 杰理之提示音播放路径设置【篇】

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号