Node.js 节点js:获取错误";侦听器必须是一个函数;
我有以下代码:Node.js 节点js:获取错误";侦听器必须是一个函数;,node.js,listener,Node.js,Listener,我有以下代码: function myfunction(url_parts){ fs.unlink(__dirname + '/temp/' + url_parts + '.pdf', function(err){ if (err) console.log(err); console.log('unlink ok'); }); } var url_parts= 'filename' req.on("close", myfunction(url_parts)); 我得到错
function myfunction(url_parts){
fs.unlink(__dirname + '/temp/' + url_parts + '.pdf', function(err){
if (err) console.log(err);
console.log('unlink ok');
});
}
var url_parts= 'filename'
req.on("close", myfunction(url_parts));
我得到错误“监听器必须是一个函数”。但是myfunction是一个函数:D怎么了??
如果我没有将任何参数传递给myfunction,我不会得到此错误,但我需要传递url\u部分。
我不能使用匿名函数,因为我需要在代码的另一部分中调用removeListener方法
req.removeListener('close', myfunction);
AFAIK在Node.js中使用事件的任何内容都在EventEmitter上扩展 您可以尝试使用匿名函数添加和删除侦听器:
req.removeAllListeners('close');
您应该使用函数(分配给function.prototype)。您的代码将变为(仅更改最后一行)
bind函数允许您创建一个新函数,该函数将在以后每次调用bind函数时将您定义的参数传递给该函数
要在以后删除事件,应该删除bind调用的结果,而不是原始函数。Try
req.removeAllListeners('close')代码>否,错误在这里-->请求打开(“关闭”,myfunction(url_parts));如果req
是EventEmitter
的扩展,那么您可以在那里使用匿名函数并使用req.removeAllListeners('close')代码>删除侦听器。哦,你是对的:D谢谢你,伙计!!!将您的答案(removealllistener)与Salem的答案(在匿名函数中调用myfunction)相结合,我解决了我的问题:DSorry,但3年后我看到了这个答案。这是最好的答案
function myfunction(url_parts){
fs.unlink(__dirname + '/temp/' + url_parts + '.pdf', function(err){
if (err) console.log(err);
console.log('unlink ok');
});
}
var url_parts= 'filename'
req.on("close", myfunction.bind(null, url_parts));