在node.js中异步读取多个文件

莫希特·阿格瓦尔(Mohit Aggarwal)

我的应用程序需要读取一个包含多个文件的文件夹。所有文件应异步获取。所有文件的输出应合并为一个数组。为了做到这一点,下面的代码已经完成。(我用了诺言)。对于单个文件,它起作用,但是对于多个文件,它不起作用。需要您的建议。

来自files.js的代码

function readFolder(FolderPath){
    return new Promise(function(resolve, reject){
        fs.readdir(FolderPath, (err, files) => {
            if (err) {
                logger.error(`Folder (${FolderPath}) reading Failed :` + err)
                reject(error = "Reading Folder failed")
            } else {
                console.log('resolved')
                resolve(files)
            }
        })
    })
};

function readFile(FilePath){
    return new Promise(function(resolve,reject){
        fs.readFile(FilePath, (err, data) => {
            if (err) {
                reject(error = "Reading file failed") 
            } else {
                console.log('Read File started :'+FilePath)
                var chunk = data.toString();
                var lines = chunk.split('\n');
                var routes = []
                for(var line = 0; line < lines.length; line++){
                    if (lines[line].match(/router.post/)){
                        currentRoute = lines[line].substring(lines[line].indexOf("'")+1 , lines[line].lastIndexOf("'"))
                        route = "/api/angular" + currentRoute
                        routes.push(route)
                    }
                }
                if (routes !== []){
                    console.log('routes for file is :' + routes)
                }

                resolve(routes)
            }
         })
    })
};

function readFiles(FilePaths){
    return new Promise(function(resolve, reject){
        let routesArray = []
        FilePaths.forEach(FilePath => {
            console.log("File Path :"+FilePath)
            readFile(FilePath)
            .then((routes) => {
                console.log('Concatinate')
                routesArray = routesArray.concat(routes)
            })
            .catch((error) => {
                console.log(error)
            })
        })
        console.log(routesArray)
        resolve(routesArray)
    })
}

文件名:api.js(承诺调用)


const files = require('./../controlers/files')
files.readFolder(FolderPath)
    .then((filesArray) => {
        var FilePaths = [];
        filesArray.forEach(file => {
            path = "routes/"+file
            FilePaths.push(path)
        })
        console.log(FilePaths)
        return files.readFiles(FilePaths)
    })
    .then((routes) => {
        console.log('routes :', routes)
        res.status(200).send(routes)
    })
    .catch((error) => {
        response.message = "Folder or file Reading failed";
        response.success = false;
        res.status(500).send(response);
    })

请提出我错了的地方。

d

.forEach与Promise语法一起使用时(readFiles功能上),您“错了” .forEach是“回调”样式的函数,在Promise中无法正常使用。

您需要等待所有文件都完成,我的建议是使用Array.mapPromise.all

function readFiles(FilePaths) {
  return new Promise(function (resolve, reject) {
    let routesArray = []
    const promises = FilePaths.map(FilePath => { // get back an array of promises
      console.log("File Path :" + FilePath)
      return readFile(FilePath)
        .then((routes) => {
          console.log('Concatinate')
          routesArray.push(...routes) // I like .push function
        })
        .catch((error) => {
          console.log(error)
        })
    });
    Promise.all(promises)
      .then(() => { // all done!
        console.log(routesArray)
        resolve(routesArray)
      })
  })
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在node.js中异步读取文件module.exports

来自分类Dev

Node.js - Gunzip 已读取的文件异步问题

来自分类Dev

Node.js-共享在多个文件之间异步创建的变量

来自分类常见问题

在Node.js中读取文件

来自分类Dev

在Node.js中读取XML文件

来自分类Dev

从node.js中的文件读取

来自分类Dev

正确的过程以在Node.js中调用多个异步函数

来自分类Dev

正确的过程以在node.js中调用多个异步函数

来自分类Dev

如何在Node JS / Express JS Project中读取文件?

来自分类Dev

Node.js如何进行api调用异步读取文件

来自分类Dev

如何在Node.js中同步读取文件内容?

来自分类Dev

在node.js中的if语句中读取txt文件

来自分类Dev

在node.js中读取csv文件的内容

来自分类Dev

从Node.js中的文件同步读取行

来自分类Dev

如何在Node.js中读取.nlp文件

来自分类Dev

在Node.js中模拟特定读取文件错误

来自分类Dev

在Node JS中读取Windows-1252文件

来自分类Dev

从node.js中的URL读取XML文件:编码问题

来自分类Dev

等到文件被创建以在 node.js 中读取它

来自分类Dev

是否可以在 Node 中读取文件并导出其内容(不异步导出)?

来自分类Dev

node-red 读取多个文件

来自分类Dev

在Node.js中附加多个gzip文件(同步)

来自分类Dev

返回node.js中多个文件的内容

来自分类Dev

Node.js无法识别多个文件中的模型定义

来自分类Dev

读取多个目录中的文件,使用Node和Promises将文件名与数据匹配

来自分类Dev

读取多个目录中的文件,使用Node和Promises将文件名与数据匹配

来自分类Dev

Node.js fs.readfile /异步文件访问:在回调中获取当前文件

来自分类Dev

如果目标文件不存在,则在 Node.js 中异步重命名文件

来自分类Dev

如何在node.js中异步执行多个REST API请求?

Related 相关文章

  1. 1

    在node.js中异步读取文件module.exports

  2. 2

    Node.js - Gunzip 已读取的文件异步问题

  3. 3

    Node.js-共享在多个文件之间异步创建的变量

  4. 4

    在Node.js中读取文件

  5. 5

    在Node.js中读取XML文件

  6. 6

    从node.js中的文件读取

  7. 7

    正确的过程以在Node.js中调用多个异步函数

  8. 8

    正确的过程以在node.js中调用多个异步函数

  9. 9

    如何在Node JS / Express JS Project中读取文件?

  10. 10

    Node.js如何进行api调用异步读取文件

  11. 11

    如何在Node.js中同步读取文件内容?

  12. 12

    在node.js中的if语句中读取txt文件

  13. 13

    在node.js中读取csv文件的内容

  14. 14

    从Node.js中的文件同步读取行

  15. 15

    如何在Node.js中读取.nlp文件

  16. 16

    在Node.js中模拟特定读取文件错误

  17. 17

    在Node JS中读取Windows-1252文件

  18. 18

    从node.js中的URL读取XML文件:编码问题

  19. 19

    等到文件被创建以在 node.js 中读取它

  20. 20

    是否可以在 Node 中读取文件并导出其内容(不异步导出)?

  21. 21

    node-red 读取多个文件

  22. 22

    在Node.js中附加多个gzip文件(同步)

  23. 23

    返回node.js中多个文件的内容

  24. 24

    Node.js无法识别多个文件中的模型定义

  25. 25

    读取多个目录中的文件,使用Node和Promises将文件名与数据匹配

  26. 26

    读取多个目录中的文件,使用Node和Promises将文件名与数据匹配

  27. 27

    Node.js fs.readfile /异步文件访问:在回调中获取当前文件

  28. 28

    如果目标文件不存在,则在 Node.js 中异步重命名文件

  29. 29

    如何在node.js中异步执行多个REST API请求?

热门标签

归档