我正在尝试在文件夹中提供一堆文件,它应该读取每个文件并返回指定信息以获取正确的唯一路径“(这意味着/资源目录分别具有f1.txt,f2.txt文件,如同这/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)
}))
}
任何建议都会很明显,谢谢!
答案 0 :(得分:0)
问题是你只处理一个文件。首先,您需要检索所有文件,然后使用您的函数
步骤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
的顺序给出结果。
动机在这里逐个读取所有文件并将输出保存在变量中。 使用上面的方法,您不是逐个读取文件,而是利用promises的功能并允许它们同时运行。