EventSource пропускает первые сообщения перед addEventListener - PullRequest
0 голосов
/ 14 мая 2019

Как предотвратить, чтобы новый EventSource пропускал первые сообщения перед вызовом addEventListener (в чистом ванильном JS)?

Проблема заключается в состязании между получением начальных данных и подпиской обработчика из-за неатомарной операции create-subscribe. Было бы неплохо иметь возможность создавать EventSource в закрытом состоянии или передавать подписчиков прямо в конструктор.

Я вижу два обходных пути:

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

Они оба безобразны, чтобы даже не пытаться использовать SSE и переходить на WebSocket. Но это другой вопрос.

1 Ответ

1 голос
/ 14 мая 2019

Я столкнулся с такой ситуацией, пытаясь создать EventSource и подписаться в консоли Chrome.Итак, между созданием и добавлением слушателя была задержка в секундах.Да, в реальной жизни в сценарии задержка будет около миллисекунд, но она все еще существует.

И это стало причиной вашей проблемы;единственная причина, по которой вы это испытали, заключалась в том, что вы вводили каждую строку вручную через консоль.Вы не можете ожидать, что код, введенный таким образом, будет вести себя так же, как и код, выполняемый последовательно в браузере напрямую.В «реальной жизни» проблема не существует , потому что время между операторами меньше , чем миллисекунды, но более того, код является синхронным и блокирует цикл обработки событий, поэтому входящийсобытия никогда не будут пропущены в этой ситуации.Чтобы приблизиться к реалистичному поведению с консоли, вам нужно будет одновременно вставить и операторы создания и назначения слушателя в один блок.Если вы сделаете это, то увидите, что ни одно событие не пропущено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...