首页 > 解决方案 > 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 来解决的。但不是全部。

标签: javascriptsocketsasynchronous

解决方案


推荐阅读