所以,如果我编写这样的函数,我传递的回调工作正常,我会遇到一些 Javascript 怪异
messageHandler(callback) {
this.ws.onmessage = (data) => {
callback(data.data);
};
}
如果你这样写
messageHandler(callback) {
this.ws.on('message', (data) => {
callback(data);
});
}
它将回调转变为消息事件,我似乎无法弄清楚为什么,但如果有人可以解释的话,我想理解这种行为。提前致谢。
最佳答案
我认为这个问题省略了重要信息,但根据代码示例,我认为您正在使用 https://github.com/websockets/ws实现,正确吗?
如果是这样,则 .ws.on('message', ...
指的是 Event Emitter listener 。传递给处理程序的参数是消息或流或发射器发出的任何数据对象.
.ws.onmessage
指的是浏览器的 Websocket API - 所以传递的参数是 MessageEvent 。正如您从规范中看到的,data
是 MessageEvent
类的一个属性,这解释了为什么您必须使用 1 级间接引用作为 data.data
.
如果您调用参数 event
而不是第一个示例中的 data,也许会不会那么困惑:
this.ws.onmessage = (event) => {
callback(event.data);
};
您还可以将其视为服务器端事件与客户端事件 - 您的第一个示例是客户端事件,而第二个示例是服务器端事件。客户端事件符合Websockets API而在 NodeJS 世界中,服务器端事件通常使用事件发射器。
关于javascript - 消息事件内的回调突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53107449/