无法在Node js中获取变量值



我试图使函数异步,但当我打印攻击,它打印出{}没有任何东西在它,但当我打印值后添加它们在攻击我可以打印它们为什么是这样的?如何使用该值?

var fs = require('fs');
var http = require('http');
var attacks = {};
var phase_name;
var directory = 'cti-master\enterprise-attack\attack-pattern\';
// getting all files names.
async function getData(directory){
fs.readdir(directory, (err, files) => { 
if(err) { return;}
var fileNum = 0;

// opening all the files and sorting the data in them.
while (fileNum < files.length - 1)
{
fs.readFile(directory + files[fileNum], 'utf8', (err, data) =>
{
// parsing the data from json.
var fileData = JSON.parse(data);
// sometimes there is no phase name.
if(fileData['objects'][0]['kill_chain_phases'] == undefined){phase_name = undefined;}
else{phase_name = fileData['objects'][0]['kill_chain_phases'][0]['phase_name'];}
// sorting data by name to make it easier later.
attacks[fileData['objects'][0]['name']] = {
id: fileData['objects'][0]['id'],
type: fileData['objects'][0]['type'],
description: fileData['objects'][0]['description'],
x_mitre_platforms: fileData['objects'][0]['x_mitre_platforms'],
x_mitre_detection: fileData['objects'][0]['x_mitre_detection'],
phase_name: phase_name};
}); 
fileNum += 1;
};
}); 
var keys = Object.keys(attacks);
console.log(attacks);
}
getData(directory);

这里空日志的原因是因为节点没有等待while循环完成,因此您将获得空日志。基本上,您可以通过使用async-await方法来改进这段代码。

但是如果你坚持这个代码,我只是建议这个逻辑。

只需将日志放入if条件块中。

有条件"只有达到预期文件数才打印" 例如。

if(fileNum === files.length) {
var keys = Object.keys(attacks);
console.log(attacks);
}

那么现在日志只在满足这个条件时打印,这意味着在while循环完成后

最新更新