node.js - 如何在 Nodejs 中使用监听器的回调函数而无需内联编写?

标签 node.js performance listener

因此,Nodejs 记录添加监听器的方式是使用 .on 函数,例如

...
var somevar_i_need_to_use = 5;
request.on('close', function handle_close() {
    console.log("Connection closed" +somevar_i_need_to_use);
});
...

这会很好地工作,例如我可以很好地访问外部变量 somevar_i_need_to_use 。在不过多查看内部结构的情况下,我假设不内联函数的等效方法是编写:

...
var somevar_i_need_to_use = 5;
request.addListener('close', handle_close(a_somevar_i_need_to_use));
...

function handle_close(a_variable) {
    console.log("Connection closed" +a_variable);
}

例如一个命名函数。但是,运行此程序时,我收到错误:

   throw new TypeError('listener must be a function');
   ^

TypeError: listener must be a function
    at IncomingMessage.addListener (events.js:197:11)
    at IncomingMessage.Readable.on (_stream_readable.js:680:33)
    at handle_get_request (/root/wshub/wsh.js:84:9)
    at Server.internal_request_handler (/root/wshub/wsh.js:59:9)
    at emitTwo (events.js:87:13)
    at Server.emit (events.js:172:7)
    at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:537:12)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:97:23)

有人可以告诉我为什么会发生这种情况吗? 我认为这等于内联编写吗?出于性能、模块化和可读性的原因,我想这样声明我的函数。

最佳答案

您遇到此错误是因为您传递了作为监听器返回的任何handle_close 函数的结果,在本例中该结果是未定义的。要实现所需的行为,请尝试如下操作:

var somevar_i_need_to_use = 5;
request.addListener('close', create_close_handler(a_somevar_i_need_to_use));


function create_close_handler(a_variable) {
    return function named_handler(...listener_args) {
        console.log("Connection closed" +a_variable);
    }
}

关于node.js - 如何在 Nodejs 中使用监听器的回调函数而无需内联编写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42391006/

相关文章:

javascript - 如何从 URL 获取 JSON 并将其存储在变量中 (Node.js)

node.js - 无法从 getStaticProps nextjs 中的 mdx 文件导入元数据

node.js - 检查当前 Node 版本

javascript - addListener 在 node.js 中做了什么?

c# - 检测 SQL 数据库更改

javascript - 尽管文件存在,Node.js 文件系统访问仍返回 ENOENT

android - 我应该让私有(private)成员引用我的 Activity 观点吗?

c++ - 我应该避免循环中常量之间的操作吗?

javascript - 在 Typed.js 中的字符串前面获取退格键

Spring引导2.1.2, hibernate 5 : Register Hibernate Event Listeners (Insert/Update/Delete)