Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJs存储目录中所有文件的内容_Javascript_Node.js_File_File Read - Fatal编程技术网

Javascript NodeJs存储目录中所有文件的内容

Javascript NodeJs存储目录中所有文件的内容,javascript,node.js,file,file-read,Javascript,Node.js,File,File Read,我有以下功能: readFiles: function(partidosPath) { fs.readdir(partidosPath,function(err,files){ if (err) throw err; files.forEach(function(file){ if(file) { fs.readFile(partidosPath+file, 'utf8', function (err,data) {

我有以下功能:

readFiles: function(partidosPath) {
    fs.readdir(partidosPath,function(err,files){
      if (err) throw err;
      files.forEach(function(file){
        if(file) {
          fs.readFile(partidosPath+file, 'utf8', function (err,data) {
            var details = [];
            if (err) {
              return console.log(err);
            }
            commonFunctions.arrayLoader(details, {name: file, content: data});
        console.log(details);
        return details;
          });
        }
      });
    });
  }
从目录中的文件列表中读取内容的

我需要用每个文件的名称和内容保存一个对象数组,如下所示:

array = [{name: file1Name, content: file1Content},....]
var details = partidos.readFiles(partidosPath);
console.log(details);
我在另一个文件中调用该函数,如下所示:

array = [{name: file1Name, content: file1Content},....]
var details = partidos.readFiles(partidosPath);
console.log(details);
问题是,在
readFiles
方法的
console.log(details)
中,我可以正确地看到信息,但是当我调用该方法时,
console.log
返回未定义的信息

PD:如果我在声明位置之外声明了
readFiles
details[]
,则信息不会正确地推送到数组中


我缺少什么?

问题是您正在进行异步调用。在异步调用中,您的程序将在调用后继续运行,而不是等待函数完成,因此它们将继续运行

console.log(details).
您或者需要做出承诺并让它等待调用完成,或者使用此处提供的调用的同步版本。与下面的链接

fs.readdirSync(path[, options]) 

fs.readFileSync(path[, options]) 

问题是您正在进行异步调用。在异步调用中,您的程序将在调用后继续运行,而不是等待函数完成,因此它们将继续运行

console.log(details).
您或者需要做出承诺并让它等待调用完成,或者使用此处提供的调用的同步版本。与下面的链接

fs.readdirSync(path[, options]) 

fs.readFileSync(path[, options]) 

您在“partidos.readFiles(partidosPath)”中已经有了“console.log”语句。数据读取完成后,它将自动记录数据。您不需要另一个console.log来执行此操作

以下是工作代码:

// utils.js

const fs = require('fs')

const readFiles = function (path, callback) {
    let arrayOfFileObjects = [];
    fs.readdir(path, function (err, fileNames) {
        if (err) {
            console.log('Read dir error!')
            return;
        }

        if (fileNames.length <= 0) {
            console.log('No files exist in the mentioned directory!')
            return
        }

        for (let i = 0; i < fileNames.length; i++) {
            const fileName = fileNames[i];

            fs.readFile(`${__dirname}\\${fileName}`, 'utf-8', function (err, fileContent) {
                if (err) {
                    console.log(err)
                    console.log('Error occured while attempting to read: ' + fileName)
                    return;
                }
                arrayOfFileObjects.push({
                    name: fileName,
                    content: fileContent
                })
                if (i === fileNames.length - 1) {
                    callback(arrayOfFileObjects);
                }
            })
        }
    })
}
module.exports = {
    readFiles
}

“partidos.readFiles(partidosPath)”中已经有了“console.log”语句。数据读取完成后,它将自动记录数据。您不需要另一个console.log来执行此操作

以下是工作代码:

// utils.js

const fs = require('fs')

const readFiles = function (path, callback) {
    let arrayOfFileObjects = [];
    fs.readdir(path, function (err, fileNames) {
        if (err) {
            console.log('Read dir error!')
            return;
        }

        if (fileNames.length <= 0) {
            console.log('No files exist in the mentioned directory!')
            return
        }

        for (let i = 0; i < fileNames.length; i++) {
            const fileName = fileNames[i];

            fs.readFile(`${__dirname}\\${fileName}`, 'utf-8', function (err, fileContent) {
                if (err) {
                    console.log(err)
                    console.log('Error occured while attempting to read: ' + fileName)
                    return;
                }
                arrayOfFileObjects.push({
                    name: fileName,
                    content: fileContent
                })
                if (i === fileNames.length - 1) {
                    callback(arrayOfFileObjects);
                }
            })
        }
    })
}
module.exports = {
    readFiles
}

我怎么能保证呢?有什么想法吗?声明函数async并将fs.readdir作为返回的承诺。之后,您需要在fs.readFile上使用'await'。然后更改退货明细;解决(细节);之后,我将在var details=await partidos.readFiles(partidosPath)上再次使用wait;我在下面留下了两个链接以提供帮助,请让我知道这是否有帮助@pedrodotnet有帮助吗?很抱歉耽搁了,我改变了方法,我将匹配项存储在数据库的一个表中,我不再需要从目录中读取文件。我怎样才能保证这一点?有什么想法吗?声明函数async并将fs.readdir作为返回的承诺。之后,您需要在fs.readFile上使用'await'。然后更改退货明细;解决(细节);之后,我将在var details=await partidos.readFiles(partidosPath)上再次使用wait;我在下面留下了两个链接以提供帮助,请让我知道这是否有帮助@pedrodotnet有帮助吗?很抱歉耽搁了,我改变了方法,我将匹配项存储在数据库的一个表中,我不再需要从目录中读取文件。我知道,我只是放控制台日志来检查功能,问题是数据没有保存,函数返回未定义我知道,我只是放了控制台日志来检查功能,问题是数据没有保存,函数的返回返回未定义