setTimeout не работает при отправке сообщения веб-сокета в nodejs - PullRequest
0 голосов
/ 02 февраля 2019

То, что я пытаюсь сделать, это получить список значений коррозионности из файла gpx и затем отправить их на сервер webSocket, но хотелось бы, чтобы между ними была небольшая задержка, составляющая от 1 до 3 секунд

const WebSocket = require('ws');
fs = require('fs');
var parser = require('xml2json');

const ws = new WebSocket('ws://172.18.0.4:3000');

coordinates = new Array();
//counter = 1;

if(!process.argv[2]){
  console.error("Please add file from gpx directory eg. 'node index gsx.file'");
  process.exit(1);
}

ws.on('open', function open() {

  fs.readFile('./gpx/'+process.argv[2], function(err, data) {
      var json = parser.toJson(data);
      obj = JSON.parse(json);
      coordinates = obj.gpx.trk.trkseg.trkpt;

      ws.send(JSON.stringify(coordinates[0]), function ack(error) {
        if(error){
          console.log(error.message);
        }
      });
  });
});

counter = 0;
ws.on('message', function incoming(data) {
  let randomtime = randomInt(1000,3000)
  if(counter < (coordinates.length -1)){
    setTimeout(function() {
      ws.send(JSON.stringify(coordinates[counter]), function ack(error) {
        if(error){
          console.log(error.message);
        }
      });
    }, randomtime);
    counter = counter + 1;
  }else{
    counter = 0;
  }
});

ws.on('error', function error(err){
  console.log(err);
});

function randomInt(low, high) {
  return Math.floor(Math.random() * (high - low) + low)
}

проблема в том, что когда я запускаю этот скрипт, он запускается медленно, просто становиться все быстрее и быстрее, а мы делаем больше, и я не уверен, почему

...