Обрабатывать неожиданные данные в прослушивателях событий, таких как WebSocket.onmessage

#javascript #websocket #dom-events

#javascript #websocket #dom-события

Вопрос:

Как мне обрабатывать неожиданные вещи, такие как странные данные, поврежденные данные, неожиданные данные или что-то происходит не так в прослушивателе событий.

WebSocket предоставляет onmessage прослушиватель событий. Если бы он получил что-то неожиданное, как с этим справиться? Путем создания исключения, входа в консоль, молчаливого игнорирования его?

  • Если прослушиватель событий выдает исключение, то, я думаю, нет ничего, что могло бы перехватить это исключение. Это плохо?
  • Использование console.log в рабочей среде плохое?
  • Если прослушиватель событий молча игнорирует сообщение? Разве это не плохо?
 let socket = new WebSocket('wss://www.example.com/');
socket.onmessage = function (event) {
    if (event.data === 'GARBAGE') {
        // What is the appropriate thing to do here?
    }
}
  

Ответ №1:

Это действительно зависит от вашего приложения и того, насколько критична проблема.

  • Как правило, вывод выходных данных на консоль для производства, особенно ошибок, не такая уж хорошая вещь. Конечным пользователям может не понравиться видеть «ошибку» или «исключение» в журнале консоли, особенно, если приложение обрабатывает некоторую конфиденциальную информацию.
  • При использовании console.log следует быть осторожным, особенно при печати некоторых переменных, так как это может привести к утечке памяти.

Игнорирование ошибки должно быть выбором по замыслу. Если вы получаете неожиданные данные на прослушиватель, это означает, что ваша система где-то работает не так, как предполагалось. По крайней мере, вы должны знать, почему вы получаете такой ввод.

Комментарии:

1. Если клиент получает неожиданные данные, это может быть связано с тем, что любой, кто использует библиотеку, использует ее вместе с сервером с ошибками.

2. Это нормально. Каковы последствия для системы / пользователя, когда он получает такой ввод?

3. Клиент будет сбит с толку и не будет знать, что делать с данными. Возможно, сбой, потому что что-то происходит undefined . В любом случае, не должна ли клиентская библиотека каким-то образом предупреждать пользователя библиотеки о том, что отправленное сервером является неожиданным?

4. Если это библиотека, то в ее готовой форме она должна выполнять одно из следующих действий: возвращать коды ошибок для сбоев, создавая исключение. Значение ошибок / исключений должно быть описано в сопроводительной документации. Они могут быть использованы приложением для правильной обработки ошибки. Журнал консоли полезен только для отладки.

5. Да, но это не обычная функция. Это функция прослушивания событий, поэтому я не знаю, подходит ли выбрасывание исключения, поскольку его нечем перехватить.