从文件创建JSON对象数组

我有一个JSOn文件列表,我想将其读取到数组中,因此每个对象都是json文件的内容。

我是Node and Express的新手,但是到目前为止,我已经尝试过了。

const express = require('express')
const app = express()
const port = 3001
const fs = require('fs')


//file upload 


const dataFolder = './parsed_json_data' 


let fileNames = []
let fileObjects = []
fs.readdir(dataFolder,(err,files) =>{  
    if(err){
    return console.log(err)
    }   
    fileNames = files.forEach(file =>{
    fileNames.push(file)
    console.log(fileNames)
    });
})

fileNames.forEach(fileName =>{
    fs.readFile(fileName,'uft8',data) =>{
        if(err){
            console.log(err)
        }
        fileObjects.push(JSON.parse(data))
        console.log(fileObjects)
    })
})




app.get('/',(req,res) => res.send('Hello World!'))

app.listen(port,() => console.log(`Example app listening on port ${port}!`))

这是一个异步操作吗?如果是这种情况,我该如何等待,以便在映射之前先读取文件名?

我曾经尝试过async / await,但是运气不好,因为它是分开操作的?

yfy332189 回答:从文件创建JSON对象数组

我认为代码在文件系统调用完成之前遍历fileNames数组。您也许可以尝试将代码创建文件名放在其自己的函数中,该函数返回数组的承诺。请参见下面的代码:

function getDirFiles(dataFolder) {
  return new Promise((resolve,reject) => {
    let fileNames = [];
    fs.readdir(dataFolder,async (err,files) => {
      if (err) {
        console.log(err);
        reject(err);
      } else {

        files.forEach(file => {
          fileNames.push(file);
          console.log(fileNames);
        });

        resolve(fileNames);

      }
    });
  });
}

getDirFiles(dataFolder).then(fileNames => {
   console.log(fileNames);
});
,

您可以在forEach中使用要映射的数组。计算数组的总长度,并在到达最后一个fakeItem时触发函数。

const fakeItems = [...document.querySelectorAll('.items)]
fakeitems.forEach((fakeItem,i,arr) => {
   const arrLength = arr.length - 1
   if (i === arrLength) {
       secondFunction()
    }
})
function secondFunction() {
 /* This function fires once the last item is mapped though */
}
本文链接:https://www.f2er.com/3074592.html

大家都在问