Комментарии 12
С одной стороны вроде статья больше про вебсокеты. Но все же, зачем постоянно получать время с сервера, если достаточно знать часовой пояс?
У пользователя по (куче причин) может быть несинхронизированное время на компе. Время - это вообще постоянный источник багов и хаков в реальной разработке.
У пользователя сайт по https не откроется если будет время сбито :) вот вообще не встречал кейса что бы время было сбито у клиентского устройства - это первое. А второе, что это вообще за фигня полагаться на данные клиента? А если я часы переведу нарошно? А потом удивляемся низкому качеству веб приложений.
Разверну мысль. Кидаем запрос любой, забираем https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date заголовок из ответа, строим оффсет/таймзону от времени клиента и времени сервера - показываем время учитывая этот офсет/таймзону. Все!
один раз запросили время с сервера (плюс временная зона), запомнили. рассчитали дельту со временем на клиентской стороне. далее, при отображении, учитываем эту дельту.
зачем постоянно получать время с сервера?
Нужен был небольшой пример использования веб сокетов и отправка времени это как раз небольшой пример.
Позже будет пост с таймзонами и там будет пример общего кода переключением таймзон для любых данных которые отправляются по веб сокетам и он будет показан на примере как раз этого веб сокета с временем.
Стать прекрасна. Я как сеньор в JS/TS с бэкграундом техлида Ангуляр и node, почти всё понял, кроме того зачем в демо nz-zorro, можно же для демо и нативные элементы, хотя это вопрос вкуса.
А вот новичкам в ангуляр тема будет огонь: смотрите парни как вы сможете, если... разберётесь.
ЗЫ.
this.appRestService
.appControllerGetData()
.pipe(
tap((result) => this.serverMessage$.next(result.message)),
untilDestroyed(this)
)
.subscribe();
А не проще сразу (без сабскрайба) и мар вместо тап?
this.serverMessage$ =
В signOut тоже грязненько, или сейчас так пишут?
Map ожидает что будет замена на результат функции. Без сабскрайба не запустится цепочка так как подписантов нет - ей не зачем исполняться.
Так на sendMessages$ есть же подписка в шаблоне
Ну есть и есть подписка в шаблоне на serverMesaage$, учитывая что это behaviorSubject то подписка вызовется два раза - один для дефолного значения сразу как шаблон подпишется и второй раз уже в новом тике евентлупа когда данные с сервера придут и проставятся через next в tap. Но без пустого subscribe ни map ни tap не вызовутся, потому что никто не слушает subject, а следовательно ему не нужно выполняться. Это я еще молчу о том что пора на сигналы переходить.
Вариантов улучшить там очень много)
Этот пост является частью цикла постов по созданию некого фулстек бойлерплейта https://habr.com/ru/search/?q=[nestjsmod]&target_type=posts&order=date, и я просто основные моменты пишу в коде и в виде постов на хабре по пути оформляю, возможно когда весь проект напишется, пойдут статьи по поводу рефакторинга.
А почему именно написал с сабскрайбом , этот участок кода идет с поста где был простой пример интеграции Ангулар и Нест https://habr.com/ru/articles/835168/
Получение серверного времени через WebSockets и отображение его в Angular-приложении