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

标签 node.js

当我调用此代码(尝试将目录中的文件读入 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/

相关文章:

node.js - 监听自定义端口时使用 SSL (https) 连接到 Nodejs/Socket.IO 服务器

node.js - 在 Node.js REPL 中,为什么会发生这种情况?

node.js - 我不明白为什么我的 axios post 请求不起作用 - 404 not found

node.js - 使用一个 Angular 7 应用程序的多个域和子域

javascript - 我如何在 Nodejs Buffer 上像 struct union type 一样处理 C?

mysql - 在 Node.js Jade 中需要帮助

node.js - 我想要一个自定义检查函数,用于在 node.js 中与 util.inspect 一起使用,以专门处理数组

javascript - 如何在node.js(simple-ssh模块)中设置SSH代理转发?

Node.js 安装卡住

android - 如果状态代码为 400 并在 android 中进行改造,则在响应错误主体上接收 NULL