我有一个充满json文件的文件夹,我正在尝试将它们全部推送到数组中。但是,外部数组是空白的。任何关于为什么会发生这种情况或解释更好的方法的帮助将不胜感激。
var fs = require('fs');
var dataFolder = './jsonData/';
var arr = [];
fs.readdir(dataFolder, (err, files) => {
files.forEach(file => {
fs.readFile(dataFolder + file, 'utf8', function (err, data) {
if (err) throw err;
arr.push(data);
console.log (arr); // correct output
})
})
})
console.log (arr); //output is []
对不起它看起来多么丑陋,但这里是内部数组的一些输出:
['{\ n“title”:“一种新的科学[精装]”,\ n“作者”:“Stephen Wolfram”,\ n“价格”:“$ 20.73”,\ n“shippingWeight”: “5.6磅”,\ n“isbn10”:“1579550088”\ n}']
['{\ n“title”:“一种新的科学[精装]”,\ n“作者”:“Stephen Wolfram”,\ n“价格”:“$ 20.73”,\ n“shippingWeight”: “5.6磅”,\ n“isbn10”:“1579550088”\ n}', '{\ n“标题”:“我戴着黑帽子:与恶棍一起挣扎(真实和想象)[精装]”,\ n“作者”:“查克克洛斯特曼”,\ n“价格”:“15.49美元”, n“shippingWeight”:“2.2磅”,\ n“isbn10”:“1439184496”\ n}']
答案 0 :(得分:2)
readdir
是异步的,在您到达console.log
时尚未执行。
var arr = [];
- 将arr
设置为空数组。fs.readdir(....)
去读取后台的目录并安排在readdir后台作业完成后执行回调和此文件已完成激活。console.log(arr);
打印现在的arr(空)。arr
。console.log(arr);
打印现在的arr(最终填充)。全球国家也是一个混乱和错误的来源。尝试设计代码,使其不依赖于全局状态。 (https://softwareengineering.stackexchange.com/a/148109/16887)