Реагируйте на работника локального хранилища и обслуживания (отправка данных, когда вы снова в сети - PullRequest
2 голосов
/ 14 октября 2019

Я Здравствуйте, попробуйте отправить мои данные (данные в локальном хранилище), когда я снова в сети, с работником службы. Если возможно, не используйте IndexedDB.

Я несколько раз читал, что локальное хранилище не работает с сервисным работником, поэтому я не могу восстановить данные, чтобы отправить их после того, как будет выполнено распознавание в Интернете. Это правда ? Как проверить мое решение, я немного растерялся (и новичок в React) извините за мой английский.

Спасибо!

1 Ответ

1 голос
/ 15 октября 2019

Вы правы, контекст Service Worker не имеет доступа к localStorage. Поэтому, если в своем коде React вы сохраняете что-то в localStorage, Service Service Worker не может получить к нему доступ.

Существует два разных подхода к вопросу о том, «как обрабатывать HTTP POST, инициированные, когда пользователь был в автономном режиме»:

  1. Без Service Worker, в коде вашего приложения (React). В вашем коде перед выполнением процедуры POST на сервере просто отметьте navigator.onLine. Если это правда, то пользователь онлайн, и вы можете сделать POST. Если значение равно false, либо удерживайте запрос POST (или его содержимое, данные, тело) в переменной и т. Д. Или сохраните его в localStorage;добавьте прослушиватель событий для события online и создайте POST при срабатывании прослушивателя событий. Этот подход не имеет ничего общего с сервисными работниками. Вся логика в вашем коде приложения.

  2. С сервисными работниками. Напишите код своего приложения без каких-либо проверок на navigator.onLine, об этом вообще не нужно заботиться. Делайте ваши посты всякий раз, когда они действительно происходят (когда пользователь отправляет форму и т. Д.). Теперь в Service Worker подключите прослушиватель сетевых событий и сохраните их в IndexedDB или Cache для последующего использования, если соединение отключено. Когда снова в сети, запускайте запросы от сервисного работника.

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

Для подхода Service Worker есть Workbox Background Sync, которую вы можете использовать, подробнее об этом здесь: https://developers.google.com/web/tools/workbox/modules/workbox-background-sync

Стоит также отметить, что при первом подходе POST не отправляется на сервер, если пользователь закрывает браузер / покидает приложение. В подходе SW можно использовать SW и фоновую синхронизацию, чтобы повторить запрос после восстановления соединения, даже если пользователь закрыл браузер / приложение.

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