簡體   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