Heim > Fragen und Antworten > Hauptteil
event.on("newListener", function (EventName, callback) {
callback({on: EventName});
});
event.addListener("aaa", function (value) {
console.log("我是注册时自动触发的" + value.on + "事件!");
});// 正常输出:我是注册时自动触发的 aaa 事件!
event.on("removeListener", function (EventName, callback) {
callback({EventName: EventName});
});
var callbackName = function (value) {
console.log("我是删除事件时自动触发的" + value.EventName + "事件!");
}
event.on("ddd", callbackName);
event.removeListener("ddd", callbackName);
// 报错!event.js:76 callback({EventName: EventName});
天蓬老师2017-04-17 11:33:13
你到是把關機詞發上來啊!!!!!!!!!
害得我自己查文檔,補全代碼,然後只爲了你不肯發上來的一句也是唯一重要的一句話:
TypeError: undefined is not a function
順便吐槽樓主的英語水平、代碼格式以及命名風格!!!!!
也就是說 removeListener 事件的第二參數是 undefined。
順便把代碼統一了風格,更正了命名,使與 http://nodejs.org/api/events.html 一致。
var emitter = new (require('events').EventEmitter);
emitter.on("newListener", function(event, listener) {
// listener({event: event});
});
emitter.on("aaa", function(event) {
console.log("Fire on register: " + value.event);
});// Fire on register: aaa
emitter.on("removeListener", function(event, listener) {
console.log(event);
listener({event: event});
});
function onddd(event) {
console.log("Fire on remove: " + event.event);
}
emitter.on("ddd", onddd);
// emitter.removeListener("ddd", onddd);
emitter.removeAllListeners("ddd");
這段代碼可以正常運行,原因是
emitter.on("newListener", function(event, listener) {
// listener({event: event});
});
當中的函數調用被註釋掉了。
因爲
emitter.on("removeListener", function(event, listener) {
console.log(event);
listener({event: event});
});
本身也會導致 newListener 被調用。
所以,代碼改成如下即可:
var emitter = new (require('events').EventEmitter);
emitter.on("removeListener", function onRemoveListener(event, listener) {
listener({event: event});
});
emitter.on("ddd", function onDdd(event) {
console.log("Fire on remove: " + event.event);
});
emitter.on("newListener", function onNewListener(event, listener) {
listener({event: event});
});
emitter.on("aaa", function onAaa(event) {
console.log("Fire on register: " + event.event);
});
emitter.removeAllListeners("ddd");
實際上,on 和 addListener 是同樣的,因此把 addListener 改成 on 並不會逃開 newListener。
樓主學編程卻不看官方文檔,還不如我們這些只看官方文檔卻不學編程的菜鳥。。。