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()
方法。
在写入文件之前,您如何知道数据包的数量已经达到?
你可以这样做:
-
做一个简单的方法,比如你在
on()
结尾添加的check_finished_and_save()
,它控制着没有更多的数据要读取。 如果是,则写入文件。 -
你可以简单地将你的结果附加到你的文件(模式为
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); });