首页 > 解决方案 > 带有事件发射器的 ReferenceError

问题描述

我尝试使用 eventemitter,但我对 processLineByLine 有参考错误。在这段代码中,我有文本多行文件,每一行我都转换为大写。每次转换为大写都是我的事件。我做错了什么

const fs = require('fs');
const readline = require('readline');

let events = require('events');
let myEmitter = new events.EventEmitter();
myEmitter.on ('upper', async function processLineByLine(){ 
    const fileStream = fs.createReadStream('text.txt');

    const rl = readline.createInterface({
      input: fileStream,
      crlfDelay: Infinity
    });

    for await (const line of rl) {
      console.log(line.toUpperCase());
  }});
myEmitter.emit ('upper',processLineByLine() );

标签: javascriptnode.js

解决方案


(异步)函数表达式定义函数,但不将它们分配给变量。您需要的是一个(异步)函数语句

const fs = require('fs');
const readline = require('readline');

const {EventEmitter} = require('events');

let myEmitter = new EventEmitter();

async function processLineByLine() { 
    const fileStream = fs.createReadStream('text.txt');

    const rl = readline.createInterface({
        input: fileStream,
        crlfDelay: Infinity
    });

    for await (const line of rl) {
        console.log(line.toUpperCase());
    }
}

myEmitter.on('upper', processLineByLine);
myEmitter.emit('upper', processLineByLine());

另外,我不确定您要做什么。在此代码中,processLineByLine将调用两次,一次不带参数,一次以自身作为参数。


推荐阅读