繁体   English   中英

node.js自定义事件:无法调用未定义的方法“ emit”

[英]node.js custom events: Cannot call method 'emit' of undefined

我正在学习节点及其事件API,并尝试制作一个简单示例。

所以这是我的代码:

var fs = require('fs');
var util = require('util');
var events = require('events');
var FileLoader = function () {
    events.EventEmitter.call(this);
    this.load = function (url) {
        fs.readFile(url, function (err, data) {
            if (err) {
                throw err;
             } else {
                this.emit('loaded', data.toString());
            }
        });
    };
};
util.inherits(FileLoader, events.EventEmitter);
module.exports = FileLoader;

我想load()的文本文件,并在加载时,与抓住它.on('loaded',function(){...})但是this是不确定的,所以程序崩溃。

我肯定会缺少某些东西,如何使它起作用?

这不是Node的问题,而是JavaScript的问题。 this this.emit中的this.emit不是FileLoader实例。

我建议你的行为读了this在JavaScript中。 MDN文档为this可能对你有所帮助。

在这种情况下,您需要将this绑定到readFile回调中,以便通过向回调中添加.bind(this)来使内部this成为外部this

this.load = function (url) {
    fs.readFile(url, function (err, data) {
        if (err) {
            throw err;
         } else {
            this.emit('loaded', data.toString());
        }
    }.bind(this));
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM