readline在forEach中不起作用

时间:2017-04-28 12:02:46

标签: javascript node.js

我确实遇到了需要处理大量csv文件的问题。为此,我需要逐行阅读这些文件。

我创建了以下基本设置:

const testFolder = '/path/to/files';

var adapterFile = 'file1.csv';
var adapterFile2 = 'file2.csv';

const fs = require('fs');
const readline = require('readline');
const path = require('path');
const Promise = require('bluebird');
const glob = require("glob");
const winston = require('winston');

var fileProcessor = function(){};
var processingCount = 0;
var rls = [];
var streams = [];

var logfile = path.join(__dirname, 'test.log');
var logger = new (winston.Logger)({
    transports: [
      new (winston.transports.Console)(),
      new (winston.transports.File)({ filename: logfile })
    ]
});

fileProcessor.prototype.processFile = function(filePath) {

    streams[processingCount] = fs.createReadStream(filePath);

    rls[processingCount] = readline.createInterface({
        input: streams[processingCount]
    });     

    rls[processingCount].on('line', function (line) {
        logger.info('in on line');          
    });

    rls[processingCount].on('close', function (line) {      
        logger.info('in on close');

    }); 
    processingCount++;  
}

var start = function start() {

    fs.readdir(testFolder, function(err, files) {
        files
        .forEach(function(file) { 
            if (file.indexOf('file') != -1) {
                var fileProzzi = new fileProcessor();
                fileProzzi.processFile(testFolder + file);
                console.log(rls.length);
            }
        })
    })

}
var fileProzzi = new fileProcessor();
fileProzzi.processFile(testFolder + adapterFile);
var fileProzzi = new fileProcessor();
fileProzzi.processFile(testFolder + adapterFile2);
// start();

如果我手动启动过程,您可以看到上面的一切都按预期工作。但如果调用start()来处理所有文件,则永远不会读取文件。

有人能告诉我我做错了吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

为什么要在启动函数中检查文件名'MyTrigger'?

我将该条件更改为(file.indexOf('MyTrigger')== -1),如果不需要,一切正常或更好地删除该条件。

你遗漏了一些问题。