Почему строки, полученные моим веб-сокетом, становятся неопределенными (nodejs)?

Я пытаюсь избавиться от двойных кавычек вокруг символов торговой пары, которые я получаю из веб-сокета Binance. Он отправляет в режиме реального времени лучшие цены спроса и предложения для всех торговых пар на платформе. Это означает, что он очень часто получает много полезной нагрузки. Это веб-сокет:

const WebSocket = require('ws');
ws = new WebSocket('wss://stream.binance.com:9443/ws/!bookTicker');

Насколько я знаю, этот фрагмент кода работает нормально.

ws.on('open', function open() {
    ws.send(JSON.stringify({
      method: "SUBSCRIBE",
      params: ['!bookTicker'],
      id: 1
    }));
  });

Вот где проблема:

ws.on('message', function incoming(data) {
  //sets fresh_symbol to a string of the trading pair symbol
  let fresh_symbol = JSON.stringify(JSON.parse(data)['s']);
  
  //tries to filter out if fresh_symbol is undefined, doesn't work. 
  if (typeof fresh_symbol != undefined){
    console.log(fresh_symbol.replace(/['"]+/g, ''));
  }
});

Веб-сокет постоянно получает пейлоад (возможно, много сотен в секунду, я не уверен, но это много). Если я скажу коду просто console.log переменную fresh_symbol, код выведется просто отлично. Проблема возникает, когда я говорю коду вывести строку fresh_symbol, но с удалением двойных кавычек с обеих сторон с помощью метода .replace(). Даже используя этот оператор if для фильтрации, когда переменная не определена, я все равно получаю TypeError, в котором говорится, что:

    console.log(fresh_symbol.replace(/['"]+/g, ''));
                             ^

TypeError: Cannot read property 'replace' of undefined

Я предполагаю, что это как-то связано с тем фактом, что веб-сокет получает полезную нагрузку так быстро, что переменная fresh_symbol иногда перезаписывается при доступе к ней, но я понятия не имею, как решить эту проблему. Код выполняется в течение секунды или двух, выводя символы в нужном формате, прежде чем остановиться из-за ошибки. Я не профессионал, когда дело доходит до javascript, поэтому, пожалуйста, простите меня, если что-то здесь кажется очевидным.


person user411270    schedule 20.01.2021    source источник
comment
Я только что понял, что ошибка исходила от «неопределенного» фильтра.   -  person user411270    schedule 20.01.2021


Ответы (1)


Ошибка возникает из-за «неопределенного фильтра»:

if(typeof fresh_symbol != undefined)

должно быть:

if(typeof fresh_symbol != 'undefined')

так как typeof возвращает строку типа.

person user411270    schedule 20.01.2021