Я думаю, что вопрос опускает важную информацию, но, основываясь на примерах кода, я думаю, что вы используете https://github.com/websockets/ws реализацию, верно?
Если это так, то .ws.on('message', ...
относится к прослушивателю отправителя событий . Параметры, передаваемые вашему обработчику, - это сообщение, поток или любой другой объект данных, излучаемый эмиттером.
.ws.onmessage
относится к браузеру Websocket API - поэтому переданный параметр имеет значение MessageEvent . Как видно из спецификации, data
- это свойство класса MessageEvent
, которое объясняет, почему вы должны ссылаться с 1 уровнем косвенности как data.data
.
Возможно, было бы менее запутанным, если бы вы назвали свой параметр event
вместо данных в первом примере:
this.ws.onmessage = (event) => {
callback(event.data);
};
Вы также можете рассматривать это как события на стороне сервера по сравнению с событиями на стороне клиента - ваш первый пример - это событие на стороне клиента, тогда как второй пример - это событие на стороне сервера. Клиентские события соответствуют Websockets API , тогда как серверные события в мире NodeJS, как правило, используют источники событий.