node.js自定义事件:不能调用未定义的方法“emit”
我正在学习节点,它的事件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.emit
的this
不是一个FileLoader
实例。
我build议你阅读JavaScript中的this
行为。 MDN文档可能对您有所帮助。
在这种情况下,你需要在你的readFile
callback函数中绑定this
内部函数,通过在你的callback函数中join.bind(this)
来实现this
内部函数。
this.load = function (url) { fs.readFile(url, function (err, data) { if (err) { throw err; } else { this.emit('loaded', data.toString()); } }.bind(this)); };