NODE.JS按特定顺序执行代码

时间:2017-08-08 04:34:00

标签: javascript node.js

我有一些代码可以解析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 个答案:

答案 0 :(得分:1)

您的解析器将从文件中一次读取一个数据包,并为每个数据包引发on()方法。

在写入文件之前,您如何知道已达到数据包的数量?

你可以这样做:

  1. 制作一个简单的方法,例如您在check_finished_and_save()末尾添加的on(),它控制着没有更多数据可供阅读。如果是,则写入文件。

  2. 您只需将结果附加到您的文件(a的模式append)即可。每次调用on()时,都会将结果附加到文件的末尾。

答案 1 :(得分:1)

捕获解析器的结束事件,并执行stringify和写入文件操作等内容

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

答案 2 :(得分:1)

完成解析后需要写入文件

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