javascript - javascript套接字服务器正在覆盖变量
问题描述
我有一个套接字服务器,可以从工业环境中的机器接收数据包。当数据包进来时,我通过 async / await 函数处理它们。问题是,我的一些变量在这个过程中被覆盖(我相信),我不知道是什么原因造成的。
这是调用该函数的代码
const advancedSpeedFunctionResult = await writeAdvancedSpeed(packet);
以及一些处理它的代码:
async function writeAdvancedSpeed(packet) {
const { statusSensor, packetId, message } = packet;
logger.verbose(`[advSpd] [_${statusSensor.monitor}_] running writeAdvancedSpeed`);
let on;
let off;
if (packetId == 59) {
on = message[4] + (message[5] << 8);
off = message[6] + (message[7] << 8);
} else {
on = (message[14] << 8) + message[13];
off = (message[16] << 8) + message[15];
}
logger.verbose(`[advSpd] [_${statusSensor.monitor}_] initial on: ${on} | off: ${off}`);
const cycleTimer = await CycleTimer.query().findOne({ monitor: statusSensor.monitor });
if (cycleTimer) {
let speed;
if (on + off < 1) {
speed = 0.0;
logger.verbose(`[advSpd] [_${statusSensor.monitor}_] on + off < 1 set speed to ${speed}`);
} else {
speed = (on * 100.0) / (on + off);
logger.verbose(
`[advSpd] [_${statusSensor.monitor}_] (on: ${on} * 100) / (on: ${on} + off: ${off}) = set speed to ${speed}`
);
}
logger.verbose(`[advSpd] [_${statusSensor.monitor}_] speed before rounding ${speed}`);
然而,这是我在日志中得到的,请注意不应该存在的零速度
2021-06-19 07:54:49:489<>verbose: [advSpd] [_5929b_] running writeAdvancedSpeed
5570 2021-06-19 07:54:49:489<>verbose: [advSpd] [_5929b_] initial on: 8300 | off: 51700
5571 2021-06-19 07:54:49:490<>verbose: [advSpd] [_5929b_] speed before rounding 13.833333333333334
5572 2021-06-19 07:54:49:490<>verbose: [advSpd] [_5929b_] speed after rounding 13.833333333333334
5573 2021-06-19 07:54:49:490<>verbose: [advSpd] [_5929b_] cycle_timer_id = 5441 writing on: 8300 | off: 51700 | speed 13.833333333333334
5574 2021-06-19 07:54:49:495<>verbose: [advSpd] [_5929b_] writing advanced speed hit
5575 2021-06-19 07:55:40:875<>verbose: [advSpd] [_5929b_] running writeAdvancedSpeed
5576 2021-06-19 07:55:40:875<>verbose: [advSpd] [_5929b_] initial on: 8300 | off: 51700
5577 2021-06-19 07:55:40:878<>verbose: [advSpd] [_5929b_] speed before rounding 13.833333333333334
5578 2021-06-19 07:55:40:878<>verbose: [advSpd] [_5929b_] speed after rounding 13.833333333333334
5579 2021-06-19 07:55:40:878<>verbose: [advSpd] [_5929b_] cycle_timer_id = 5441 writing on: 8300 | off: 51700 | speed 13.833333333333334
5580 2021-06-19 07:55:40:902<>verbose: [advSpd] [_5929b_] writing advanced speed hit
5581 2021-06-19 07:55:48:139<>verbose: [advSpd] [_5929b_] running writeAdvancedSpeed
5582 2021-06-19 07:55:48:139<>verbose: [advSpd] [_5929b_] initial on: 8300 | off: 51700
5583 2021-06-19 07:55:48:140<>verbose: [advSpd] [_5929b_] speed before rounding 0
5584 2021-06-19 07:55:48:140<>verbose: [advSpd] [_5929b_] speed after rounding 0
5585 2021-06-19 07:55:48:140<>verbose: [advSpd] [_5929b_] cycle_timer_id = 5441 writing on: 0 | off: 0 | speed 0
5586 2021-06-19 07:55:48:158<>verbose: [advSpd] [_5929b_] writing advanced speed hit
5587 2021-06-19 07:55:53:433<>verbose: [advSpd] [_5929b_] running writeAdvancedSpeed
5588 2021-06-19 07:55:53:433<>verbose: [advSpd] [_5929b_] initial on: 8300 | off: 51700
5589 2021-06-19 07:55:53:434<>verbose: [advSpd] [_5929b_] speed before rounding 13.833333333333334
5590 2021-06-19 07:55:53:434<>verbose: [advSpd] [_5929b_] speed after rounding 13.833333333333334
5591 2021-06-19 07:55:53:434<>verbose: [advSpd] [_5929b_] cycle_timer_id = 5441 writing on: 8300 | off: 51700 | speed 13.833333333333334
5592 2021-06-19 07:55:53:467<>verbose: [advSpd] [_5929b_] writing advanced speed hit
如果这个问题在这里得到解决,它也将修复我的代码中发生类似事情的其他一些区域。这可能是由其他带有这些值的数据包引起的吗?不知何故,它们被交叉错位或保存在内存中并写在这里?此日志仅显示本机报告的结果,但每分钟有数百个。
一些冲突是通过使用比 let 更多的 const 来解决的。但不是全部。
解决方案
推荐阅读
- orchardcms - 如何获取 Orchard Cms 中每个 List 项的顺序?
- java - 如何在 Android Studio 中将网站内容转换为字符串?
- post - 如何通过 JSON 格式的 POST 请求在 google sheet 脚本中获取数据?
- c++ - Visual Studio 2017 不允许我创建 c++ 专用模板
- r - 在 R 中,关闭相同 data.frame 上的 data.table 自动更新?
- d3.js - d3:用什么来画一些管道网?
- python - 在scrapy中使用链接提取器时如何提取请求url wrt响应url?
- binaryfiles - 读取存储在存储器或内存中的文件
- typescript - 如何定义与第 1 级相同但在打字稿中的休息级别不同的对象类型?
- php - Twig 从基本视图渲染其他控制器