NODE.JS Выполнить код в определенном порядке

1

У меня есть код, который анализирует файл pcap и записывает проанализированные данные в массив data = [] а затем записывает эти данные в файл JSON:

var fs = require("fs");
var pcapp = require('pcap-parser');
var hex = "";
var data = [];
var i = 0;

function hex2a(hexx) {
    var hex = hexx.toString();//force conversion
    var str = '';
    for (var i = 0; i < hex.length; i += 2)
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
        return str;
}

var parser = pcapp.parse('C:/Users/Brandt Winkler Prins/Desktop/data.pcap');
parser.on('packet', function(packet) {
    hex = [...packet.data].map(_ => ('0' +_.toString(16)).slice(-2)).join();
    var ticker = hex2a(hex.substring(282, 306).replace(/,/g,""));
    var bidPrice = parseInt(hex.substring(318,342).split(",").reverse().join(""), 16);
    var timestamp = parseInt(hex.substring(258, 282).split(",").reverse().join(""), 16);
    if(packet.header.capturedLength == 126 && ticker == "AAPL    ") {
       data[2*i] = bidPrice;
       data[2*i-1] = timestamp;
       i++
    }
 });
 data = JSON.stringify(data);
fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data);

Все данные записываются в соответствующий массив в parser.on(...) однако node.js выполняет мою команду .writeFile прежде чем он выполнит parser.on(...). В общем, мой вопрос таков: как я могу заставить узел выполнить мой код перед написанием моего файла?

Любая помощь приветствуется.

Теги:

3 ответа

1
Лучший ответ

Вам нужно записать в файл после завершения разбора

parser.on('end', function(){
  data = JSON.stringify(data);
  fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data);
});
  • 0
    Просто хотел сказать спасибо и получить значок комментатора
1

Захватите конечное событие для вашего синтаксического анализатора и делайте свои вещи, например, строгая и записывайте операции с файлами

parser.on('end', function (session) {
    data = JSON.stringify(data);
    fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data);
});
1

Ваш синтаксический анализатор будет считывать один пакет за раз из файла и повышать метод on() для каждого пакета.

Откуда вы знаете, сколько пакетов было достигнуто, прежде чем писать в ваш файл?

Вы можете сделать:

  1. Сделайте простой метод, например check_finished_and_save() который вы добавляете в конце вашего on() и который контролирует, что больше нет данных для чтения. Если да, он записывает файл.

  2. Вы можете просто добавить свои результаты в свой файл (режим a для append). Каждый раз, когда вызывается on() вы добавляете результаты в конец вашего файла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню