Невозможно прочитать файл JSON после записи в тот же файл JSON - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь записать в файл json, где я перечитал файл еще раз после того, как он был записан. Тем не менее, мой console.log(readJson()); показывает мне undefined, когда я пытаюсь перечитать файл. Кто-нибудь может посоветовать, что мне делать?

helper.js

const fs = require('fs')
const util = require('util');
const path = require('path')
const json_file = path.resolve(__dirname, "../json/metrics.json")



function readJson(){
    fs.readFile(json_file,function(err,data){
        if(err){
            return console.error(err)
        }
        let iplist = data.toString()
        iplist = JSON.parse(iplist)
        let str = JSON.stringify(iplist)
        return str
    })
}

function writeJson(ipdetails){

    fs.readFile(json_file,function(err,data){
        if(err){
            return console.error(err)
        }
        let iplist = data.toString()
        iplist = JSON.parse(iplist)
        iplist.table.push(ipdetails.data)
        let str = JSON.stringify(iplist)
        fs.writeFile(json_file,str,function(err){
            if(err){
                console.error(err);
            }
            console.log('returning readJson() below')
            console.log(readJson());
        })
    })
}


module.exports = {
    writeJson,
    readJson
}

1 Ответ

0 голосов
/ 20 июня 2019

return str находится внутри обратного вызова readFile, вы должны либо использовать обещания, либо fs.readFileSync, например:

function readJson() {
    let data = fs.readFileSync(json_file)
    let iplist = data.toString()
    iplist = JSON.parse(iplist)
    let str = JSON.stringify(iplist)
    return str
}

Асинхронный путь немного сложнее:

function readJson() {
    new Promise((resolve, reject) =>
        fs.readFile(json_file, type, (err, data) => {
          let iplist = data.toString()
          iplist = JSON.parse(iplist)
          let str = JSON.stringify(iplist)
          return err ? reject(err) : resolve(str);
        })
    );
}

Вы называете асинхронную версию следующим образом:

readJson().then((result) => {
  console.log(result)
})

пример асинхронного файла

Вот некоторая информация об асинхронных функциях

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...