У меня проблема с тем, что переменная функции обратного вызова теряет свою область видимости
.
У меня есть следующие 2 объекта в массиве (упрощенно, чтобы показать проблему)
const search = [{socket: new WebSocket('ws://live.trade/123')},
{socket: new WebSocket('ws://live.trade/xyz')}];
Затем я выполняю forEach для них, пытаясь зарегистрировать URL сокетов, как только сокет открыт.
search.forEach(function(element){
element.socket.on('open', function open() {
console.log(element.socket.url);
});
});
*actual output*
ws://live.trade/xyz
ws://live.trade/xyz
*expected*
ws://live.trade/123
ws://live.trade/xyz
Мне кажется, что причина в том, что когда функция open () запускает элемент, он находится вне области видимости и просто использует то, что там было в последний раз (будучи ws: //live.trade/xyz).
Это правильно? И, наконец, каким будет способ исправить это? Реальное использование для этого - когда сокет открыт, мне нужно отправить данные версии на сервер через сокет, который вызвал его ... У меня будет много сокетов в реальности, и я не хочу писать "socket.on (" open «...)» для каждого отдельного.
Есть предложения?
Большое спасибо!