Проблема медленных модулей

Используемые библиотеки: mobx и tsyringe

Проблема

В моём приложении есть два модуля ThemeService и StorageService. ThemeService просто хранит текущую тему приложения и пару методов. А StorageService предоставляет методы для взаимодействия с хранилищем. Проблема в том, что ThemeService стартует вместо с приложением, а StorageService требуется время, чтобы подгрузить локальные данные. От сервиса ThemeService уже требуют текущую тему другие модули приложения, поэтому он отправляет им fallback тему. StorageService тем временем уже подгрузил локальные данные, но ThemeService ничего об этом не знает и не может обновить fallback до актуальной темы из локального хранилища.

Временное решение

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

StorageService

// @Module - это обёртка из моей либы над @singleton из tsyringe
@Module
export class StorageService {
  // Тот самый метод
  private async [BeforeResolve]() {
    // Выгружаю данные из локального хранилища
  }

  constructor() {
    makeAutoObservable(this)
  }
}

ThemeService

@Module([StorageService])
export class ThemeService {
  private async [BeforeResolve]() {
    this.theme = this.storage.get('theme', fallback)
  }

  theme = fallback
  constructor(private readonly storage: BeforeResolve) {
    makeAutoObservable(this)
  }
}

Это работает, но в моей библиотеке много недоработок и багов к тому же это ничем не отличается от того, если бы я подписался на изменения в StorageService. И некоторым компонентам приложения приходится ждать ThemeService из-за StorageService. B fallback в данном случае не используется, поскольку ни один компонент не отрендерится, т.к. они ждут ThemeService, который в свою очередь, ждёт StorageService.


Ответы (0 шт):