javascript - 消息事件内的回调突变

标签 javascript ecmascript-6 websocket callback mutation

所以,如果我编写这样的函数,我传递的回调工作正常,我会遇到一些 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 。正如您从规范中看到的,dataMessageEvent 类的一个属性,这解释了为什么您必须使用 1 级间接引用作为 data.data.

如果您调用参数 event 而不是第一个示例中的 data,也许会不会那么困惑:

this.ws.onmessage = (event) => {
    callback(event.data);
};

您还可以将其视为服务器端事件与客户端事件 - 您的第一个示例是客户端事件,而第二个示例是服务器端事件。客户端事件符合Websockets API而在 NodeJS 世界中,服务器端事件通常使用事件发射器。

关于javascript - 消息事件内的回调突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53107449/

相关文章:

javascript - AngularJS 在 ng-repeat 中更改变量

javascript - 了解 NodeJS 上的异步/等待

javascript - 从 jquery 插件外部调用 this.each(function(){}) 中的函数

javascript - Angular 1.x ES6 Webpack 包含第 3 方库

python - 无法在 python 中将数据发送到特定的 websocket 客户端

javascript - 如何从分隔字符串创建数组?

javascript - Javascript 中的 "..."运算符

javascript - 修改生成器函数原型(prototype)

javascript - ibm bluemix nodejs 和 websockets 在客户端持续关闭

javascript - socket.io 客户端未从服务器接收消息