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

我有一些parsingpcap文件的代码,并将parsing的数据写入数组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在执行parser.on(...)之前执行我的.writeFile命令。 总之,我的问题是这样的:我怎么能强制节点执行我的代码之前写我的文件?

任何帮助是极大的赞赏。

完成parsing后,您需要写入文件

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

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

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

你可以这样做:

  1. 做一个简单的方法,比如你在on()结尾添加的check_finished_and_save() ,它控制着没有更多的数据要读取。 如果是,则写入文件。

  2. 你可以简单地将你的结果附加到你的文件(模式为append )。 每次on()被调用时,都会在文件末尾追加结果。

捕获parsing器的结束事件,并做你的东西,如stringify和写入文件操作

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