Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NODE.JS按特定顺序执行代码_Javascript_Node.js - Fatal编程技术网

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

Javascript NODE.JS按特定顺序执行代码,javascript,node.js,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

我有一些代码解析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);
var fs=require(“fs”);
var pcapp=require('pcap-parser');
var hex=“”;
var数据=[];
var i=0;
函数hex2a(hexx){
var hex=hexx.toString();//强制转换
var-str='';
对于(变量i=0;i('0'+0.toString(16)).slice(-2)).join();
var ticker=hex2a(十六进制子字符串(282306)。替换(/,/g,“”);
var bidPrice=parseInt(十六进制子字符串(318342).split(“,”).reverse().join(“,”),16);
var timestamp=parseInt(十六进制子字符串(258282).split(“,”).reverse().join(“,”),16);
if(packet.header.capturedLength==126&&ticker==“AAPL”){
数据[2*i]=投标价格;
数据[2*i-1]=时间戳;
我++
}
});
data=JSON.stringify(数据);
fs.writeFile(“C:/Users/Brandt Winkler-Prins/Desktop/Project/data.json”,data);
所有数据都会写入解析器中相应的数组。
on(…)
但是node.js在执行解析器上(…)之前会执行my
.writeFile
命令。总之,我的问题是:如何在编写文件之前强制node执行代码


非常感谢您的帮助

解析器将一次从文件中读取一个数据包,并为每个数据包提出
on()
方法

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

你可以做:

  • 制作一个简单的方法,如
    check\u finished\u和
    ,将其添加到()上的
    末尾,并控制没有更多数据可读取。如果是,则写入文件

  • 您可以简单地将结果附加到文件中(模式
    a
    for
    append
    )。每次调用
    on()
    时,您都会将结果附加到文件末尾


  • 捕获解析器的结束事件,并执行字符串化和写入文件操作等操作

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

    您需要在完成解析后写入文件

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

    只是想说声谢谢然后拿到评论员徽章