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));