在异步读取文件时解析JSON

时间:2016-02-22 22:32:49

标签: javascript json node.js asynchronous readfile

我正在尝试阅读一些JSON文件并将其结果存储到一个数组中。我有:

const files = ['file0.json', 'file1.json', 'file2.json', 'file3.json']

为了阅读所有这些内容并创建文件内容的结果数组,我这样做:

import { readFile } from 'fs'
import async from 'async'

const files = ['file0.json', 'file1.json', 'file2.json', 'file3.json']

function read(file, callback) {
  readFile(file, 'utf8', callback)
}

async.map(files, read, (err, results) => {
  if (err) throw err

  // parse without needing to map over entire results array?
  results = results.map(file => JSON.parse(file))
  console.log('results', results)
})

这篇文章帮助我实现了目标:Asynchronously reading and caching multiple files in nodejs

我想知道的是如何在读取文件的中间步骤中调用JSON.parse(),而不是在结果数组上调用map。我想澄清一下,如果不是为了正确地调用callback而传入的readFile参数,究竟是什么juliarc参数。

1 个答案:

答案 0 :(得分:1)

好吧,也许你应该在阅读步骤中移动JSON.parse

import { readFile } from 'fs'
import async from 'async'

const files = ['file0.json', 'file1.json', 'file2.json', 'file3.json']

function read(file, callback) {
  readFile(file, 'utf8', function(err, data) {
    if (err) {
      return callback(err);
    }

    try {
      callback(JSON.parse(data));
    } catch (rejection) {
      return callback(rejection);
    }
  })
}

async.map(files, read, (err, results) => {
  if (err) throw err;

  console.log('results', results)
})

我建议您阅读this article以了解回调函数的含义。