Чтение нескольких файлов в каталоге один за другим в узле Js - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь дать кучу файлов в папке, и он должен прочитать каждый файл и вернуть указанную информацию для правильного уникального пути "(это означает, что / каталог ресурсов имеет файлы f1.txt, файлы f2.txt отдельно, например,this /resource/f1.txt.)

Вывод одного файла:

{ url: 'account/43',    
  status: '200',    
  headers: [ 'content-type = application/text' ],    
  body: [ '{ name: XYZ }' ] }

URL-адрес каждого файла, который мы сохраняем как одну первичную переменную для проверки, как показано ниже, код работаетхорошо для одного файла в папке. мотив здесь, чтобы прочитать все файлы один за другим и сохранить выходные данные в переменной.

const fs = require('fs')
const path = require('path')
const _ = require('lodash')

function parseFile(filePath) {
  let content
  let output = new Promise((resolve, reject) => {
    fs.readFile(filePath, function(err, data) {
    if (err) reject( err )
    content = data.toString().split(/(?:\r\n|\r|\n)/g).map(function(line) {
      return line.trim()
    }).filter(Boolean)
    resolve(processFile(content))
  })
})
  return output
}
if (require.main === module) {
  let p = parseFile( path.join(__dirname, '../resources/FileData1.txt') )
  p.then((results => {
    console.log(results.status)
  }))
}

Любое предложение будет заметно, спасибо!

1 Ответ

0 голосов
/ 09 июня 2018

Проблема в том, что вы работаете только с одним файлом.Сначала вам нужно будет извлечь все файлы, а затем использовать вашу функцию

Шаг 1 - Получить все файлы для данного каталога.
Шаг 2 - Создать обещание для каждого файла.
Шаг 3- Используйте Promise.all и then используйте обратный вызов, который будет иметь все результаты.

if (require.main === module) {
  let dir = path.join(__dirname, '../resources')
  let files = fs.readdirSync(dir) // gives all the files
  let promises = files.map(file => parseFile(path.join(dir, file))) // gives an array of promises for each file
  Promise.all(promises).then(console.log) // Uses Promise.all and resolves all supplied promises with their results. 
  // WIN
}

Это даст результат в порядке files.

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

...