node.js - nodejs removeListener 無法得到 listener
PHP中文网
PHP中文网 2017-04-17 11:31:13
0
1
1048
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});
PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(1)
Peter_Zhu

你到是把關機詞發上來啊!!!!!!!!!

害得我自己查文檔,補全代碼,然後只爲了你不肯發上來的一句也是唯一重要的一句話:

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。

樓主學編程卻不看官方文檔,還不如我們這些只看官方文檔卻不學編程的菜鳥。。。

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan