Итак, способ Nodejs документы добавления слушателей с помощью .on
функции, такие какКак использовать функции обратного вызова для слушателей в Nodejs без необходимости писать inline?
...
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', а затем передавая ее результат (' undefined') в 'addListener', не передавая саму функцию. –