Node.js:事件发射器未正常触发

时间:2017-02-06 14:51:21

标签: javascript node.js eventemitter minimatch

我创建了一个项目,以递归方式从目录数组中查找有效的媒体文件类型。问题是我的两个事件发射器工作正常而两个没有。我已阅读文档,观看了一些视频,并搜索了此网站以寻找答案。我认为有一些基本的东西,我缺失或不理解,这是阻碍。

我有一个名为directoryWatch.js的文件,其代码如下。

let util = require('util');
let EventEmitter = require('events').EventEmitter;
let recursive = require('recursive-readdir');
let mm = require("minimatch");
let local = require('../_localData/environmentConfig');

let validMediaFiles = function(dirs){
    let self = this;
    self.emit('start',`${local.dirScanStart}`);
    dirs.forEach(function(dirName){
        recursive(dirName, function (err, files) {
            if(err){
                self.emit('error',`${local.dirScanError} ${dirName}`);
            } else{
                self.emit('success',`${local.dirScanSuccess} ${dirName}`,
                    mm.match(files, local.validFileExtensions, 
                   {matchBase: true, nocase: true, nonull: true}));
            }
        });
    });
    self.emit('end',`${local.errScanMsg}`);
};

util.inherits(validMediaFiles, EventEmitter);

module.exports = validMediaFiles;

我要发射4个事件。

  1. 查看目录的开始步骤。
  2. 尝试查找目录时出错。
  3. 阅读目录的成功。
  4. 查看目录的最后一步。
  5. 我执行的main.js文件看起来像这样。

    let local = require('./_localData/environmentConfig');
    let dirWatch = require('./fileIO/directoryWatch');
    
    let results = new dirWatch(local.directories);
    
    results.on('start',function(msg){
        console.log(msg);
    });
    
    results.on('error',function(msg){
        console.log(msg);
    });
    
    results.on('success',function(msg,files){
        console.log(msg);
        console.log(files);
    });
    
    results.on('end',function(msg){
        console.log(msg);
    });     
    

    Powershell中的输出看起来像这样

    PS G:\Javascrpt Projects\Node\Misc\Test2>
    PS G:\Javascrpt Projects\Node\Misc\Test2> node main.js
    Error scanning directory: ssdfdsfasf
    Getting media from: G:\Javascrpt Projects\Node\Misc\Test2\TestFiles\music
    Getting media from: G:\Javascrpt Projects\Node\Misc\Test2\TestFiles\music2
    {....big list of file names goes here...}
    

    问题是我的开始"事件和"结束"事件被忽略了,但我不确定为什么。

0 个答案:

没有答案