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。
樓主學程式設計卻不看官方文檔,不如我們這些只看官方文檔卻不學程式的菜鳥。 。 。