Лучшие шаблоны проектирования инициализации асинхронного JavaScript расширения - PullRequest
0 голосов
/ 07 февраля 2020

Я пишу расширение Google Chrome. Он будет следить за тем, что происходит на веб-странице, общаться с сервером, поддерживаемым базой данных, и т. Д. c. Мне интересно, если кто-нибудь знает хорошие шаблоны проектирования, учитывая, как асинхронный JavaScript становится. Вот проблемы:

  • Прежде чем я смогу что-либо сделать, мне нужно прочитать из chrome .storage. Я даже не могу подключиться к серверу, пока не прочитал настройки, чтобы установить это соединение
  • Прежде чем я смогу взаимодействовать со страницей, я хотел бы получить данные с сервера
  • На с другой стороны, мне нужно знать, что страница делает все время; это место, где я не могу немного потерять.

В среде синхронного программирования я хотел бы:

  1. Попытаться подключиться к серверу
  2. В случае успеха завершить sh загрузку страницы, и использовать данные с сервера для перемещения назад и вперед по странице
  3. В случае неудачи прочитайте последнее состояние из chrome .storage и используйте его для взаимодействия со страницей и сохраните взаимодействия в chrome .storage для syn c, когда сервер вернулся.

При использовании asyn c создается впечатление, что существует миллион зависимостей, порядков, в которых могут выполняться операции, и т. Д. c. Я могу спроектировать сложный конечный автомат, который ставит в очередь события со страницы при запуске расширения, одновременно читая настройки сервера, затем подключаясь к серверу, затем изменяя страницу, но кажется, что он очень сложный, и как будто есть какой-то элегантный шаблон проектирования, который я пропускаю

Второй момент заключается в том, что даже создание простой, но надежной очереди событий в chrome .storage кажется сложным, поскольку нет атомарных операций c, что приводит к условиям гонки. Он даже не отображает API для перечисления того, какие ключи хранятся, поэтому кажется, что легко потерять вещи, если я храню вещи под ключами c, определяемыми объектами, в зависимости от условий гонки. Опять же, я могу создать FSM, который избегает условий гонки, но кажется суперсложным.

Любые предложения о хороших статьях, сообщениях в блогах или подобных вещах, на которые я должен смотреть?

Действительно важная вещь - на самом деле - просто убедиться, что я надежно фиксирую каждое событие определенного типа на странице, когда бы это ни происходило (даже если это происходит во время загрузки страницы, если есть обрыв связи с моим сервером, если пользователь случайно закрывает браузер, если два события происходят в пределах 1 мс друг от друга и т. д. c.).

...