gpt4 book ai didi

node.js - 为什么在不使用 readFile 的 Sync 变体时该函数能够正确返回数据?

转载 作者:太空宇宙 更新时间:2023-11-04 03:29:42 26 4
gpt4 key购买 nike

当我调用此代码(尝试将目录中的文件读入 filename: content 数组)时,它不会在 readFiles() 调用中运行 console.log(data) 。如果我使用 readFile,它会按预期工作,但由于同步执行需要,在调用之外使用时不会产生数据。

function readFiles(parameters) {
var dirname = parameters.dirname;
var onFileContent = parameters.onFileContent;
var onError = parameters.onError;
fs.readdir(dirname, (err, filenames)=>{
if (err) {
onError(err);
return;
}
filenames.forEach(filename => {
return fs.readFileSync(path.resolve(dirname, filename), 'utf-8', {stdio: [0, 1, 2]}, (err, content)=>{
if (err) {
onError(err);
return;
}
onFileContent(filename, content);
});
});
});
};


readFiles({
dirname: path.join(__dirname, '../ping/'), onFileContent: (filename, content) => {
data[filename] = content;
//console.log(content);
//global.data2 = data;
console.log(data);
}, onError: function (error) {
console.log(error);

}
});
console.log(data);

使用同步变体时,我只是看到 {},但异步会产生:

{ test_node: '{"changed": false, "ping": "pong"}' }

{ test_node: '{"changed": false, "ping": "pong"}', test_node_2: '{"changed": false, "ping": "pong"}' }

我知道我需要使用同步变体,但我不明白为什么它不能像我预期的那样工作。

最佳答案

这是我认为您正在寻找的完全同步版本:

var fs = require('fs');
var path = require('path');

function readFiles(dir) {
var files = {};

fs.readdirSync(dir)
.forEach(name => {
if (fs.statSync(path.join(dir, name)).isDirectory()) return;

files[name] = fs.readFileSync(path.join(dir, name), 'utf8');
});

return files;
}

var files = readFiles('/some/folder');

console.log(files);

关于node.js - 为什么在不使用 readFile 的 Sync 变体时该函数能够正确返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com