javascript - 回调函数中的参数从哪里来? Node .js

标签 javascript node.js callback eventemitter

例如,chat 是一个 EventEmitter。回调函数可以接受一个名为message 的参数。我的问题是 message 来自哪里?事件 message 是否提供了它?如果是这样,你们能否给我一个事件 message 的示例,让我看看它何时被触发,参数是如何提供给 chat EventEmitter 的?非常感谢你们。

chat.on('message',function(message){
    console.log(message);
});

最佳答案

message 参数来自触发事件的任何内容。

source可以看出EventEmitter onaddListener 的同义词:

EventEmitter.prototype.on = EventEmitter.prototype.addListener;

然后您可以看到 addListener 只是将处理程序放入所提供类型的所有处理程序的列表中(简化代码):

EventEmitter.prototype.addListener = function(type, listener) {
  // ...  
  if (!this._events) this._events = {};
  // ...
  this._events[type] = this._events[type] || [];
  this._events[type].push(listener);
  // ...
  return this;
};

然后 emit 调用适当列表中的每个处理程序:

EventEmitter.prototype.emit = function(type) {
  // ...
  var args = Array.prototype.slice.call(arguments, 1);

  var listeners = this._events[type];
  for (var i = 0, l = listeners.length; i < l; i++) {
    listeners[i].apply(this, args);
  }
  return true;
  // ...

};

所以当你说 .emit('message', "Hello") 时,args 将是 ["Hello"],并且 listeners[i].apply(this, args) 会将这个参数列表发送到 function(message) {/* ... */} 您在您的 .on 调用:这就是 message 变成 "Hello" 的方式。

关于javascript - 回调函数中的参数从哪里来? Node .js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35005133/

相关文章:

c - 如何传递 extern(C) 函数文字?

c# - 如何将 Collection 传递给模态对话框窗口?

javascript - 提交按钮在 Chrome 中有效,但在 Firefox 或 IE 中无效

javascript - 如何检查数组中的任何日期是否在日期范围内?

python - Ansible - 通过回调将事实放入 SQLite

python - Kivy UrlRequest不触发回调

javascript - jQuery UI 可拖动克隆助手消失

node.js - AMQPlib Nodejs 消费者任务并发

javascript - 替换nodeJS中字符串内的HTML属性值

javascript - React Native 版本不匹配。无法在Android Studio中生成构建,但通过VS代码react-native run-android可以正常运行