例如,message
是一个EventEmitter。回调函数可以接受名为message
的参数。我的问题是message
来自哪里?事件message
是否提供了它?如果是这样,你们可以请给我一个事件chat
的样本,让我看看它什么时候被触发,这个参数是如何提供给chat.on('message',function(message){
console.log(message);
});
EventEmitter的?非常感谢你们。
//getting img from camera
sendbmp = Tools.getFocusedBitmap(getApplicationContext(), camera, data, focusBox.getBox());
//converting image to base64
ByteArrayOutputStream stream = new ByteArrayOutputStream();
jpgbitmap = sendbmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byteArray = stream.toByteArray();
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mJSONArray = new JSONArray(byteArray);
base64array = Base64.encodeToString(byteArray,Base64.DEFAULT);
}
} catch (JSONException e) {
e.printStackTrace();
}
答案 0 :(得分:1)
message
参数来自触发事件的任何内容。
您可以在EventEmitter
的{{3}}中看到on
是addListener
的同义词:
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"
的方式。