Полная сигнатура setDriver

Метод setDriver используется для явного выбора механизма хранения данных (драйвера), который будет применяться экземпляром localForage. Он управляет тем, какая технология будет использоваться для операций чтения и записи: IndexedDB, WebSQL или localStorage.

Сигнатура метода

setDriver(driverName: string | string[] | DriverConstructor | DriverConstructor[]): Promise<void>

Возвращаемое значение всегда представляет собой Promise<void>, который завершается после успешной инициализации выбранного драйвера или отклоняется при невозможности его использования.


Назначение и роль setDriver

Внутри localForage реализована система драйверов, позволяющая абстрагироваться от конкретного API браузера. Каждый драйвер — это отдельная реализация хранилища:

  • IndexedDB (основной современный вариант)
  • WebSQL (устаревающий, но поддерживаемый в некоторых окружениях)
  • localStorage (резервный синхронный вариант)

Метод setDriver позволяет:

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

Типы аргументов

1. Строка (имя драйвера)

localforage.setDriver('indexedDB');

Строковое значение соответствует зарегистрированному драйверу. В стандартной поставке используются:

  • 'indexedDB'
  • 'webSQL'
  • 'localStorage'

2. Массив строк (приоритет драйверов)

localforage.setDriver(['indexedDB', 'webSQL', 'localStorage']);

В этом случае библиотека пытается последовательно подключить драйверы в указанном порядке. Первый доступный и успешно инициализированный драйвер становится активным.


3. Конструкторы драйверов

localforage.setDriver([
  CustomDriver,
  localforage.INDEXEDDB,
  localforage.LOCALSTORAGE
]);

Возможна передача не только строковых идентификаторов, но и самих драйверов (или их конструкторов). Это используется при расширении функциональности через пользовательские реализации.


Поведение метода

При вызове setDriver выполняется несколько этапов:

1. Валидация драйвера

Проверяется, зарегистрирован ли драйвер в системе localForage. Если драйвер неизвестен — возвращается отклонённый Promise.


2. Инициализация драйвера

Каждый драйвер обязан реализовывать метод ._initStorage(), который подготавливает внутреннее хранилище:

  • создание или открытие IndexedDB базы
  • проверка доступности localStorage
  • инициализация таблиц WebSQL

3. Переключение контекста

После успешной инициализации активный драйвер заменяется внутри текущего экземпляра. Все последующие операции (getItem, setItem, removeItem) начинают использовать новый backend.


Особенности работы с массивом драйверов

При передаче массива setDriver работает по стратегии fallback:

  1. Берётся первый драйвер из списка
  2. Пытается инициализироваться
  3. Если ошибка — переход к следующему
  4. Процесс повторяется до успешного результата или исчерпания списка

Такой механизм обеспечивает устойчивость работы в условиях:

  • ограничений браузера (например, приватный режим)
  • отсутствия IndexedDB
  • отключённого WebSQL
  • ограничений корпоративных политик

Возвращаемое значение и асинхронность

Метод всегда возвращает Promise:

localforage.setDriver('indexedDB')
  .then(() => {
    // драйвер успешно установлен
  })
  .catch((err) => {
    // ошибка выбора драйвера
  });

Асинхронная модель обусловлена тем, что инициализация некоторых драйверов (особенно IndexedDB) требует неблокирующих операций.


Влияние на экземпляр

Важно учитывать, что setDriver влияет только на конкретный экземпляр:

const storeA = localforage.createInstance();
const storeB = localforage.createInstance();

storeA.setDriver('indexedDB');
storeB.setDriver('localStorage');

Каждый экземпляр хранит собственную конфигурацию и не разделяет активный драйвер с другими инстансами.


Ограничения и ошибки

Типичные причины отклонения Promise:

  • драйвер не зарегистрирован
  • среда выполнения не поддерживает выбранный backend
  • ошибка инициализации IndexedDB
  • блокировка storage политиками браузера
  • некорректный порядок fallback-драйверов

Внутреннее поведение и приоритеты

По умолчанию localForage использует следующий порядок:

  1. IndexedDB
  2. WebSQL
  3. localStorage

Метод setDriver позволяет полностью переопределить этот порядок, что критично для:

  • тестовых окружений
  • старых браузеров
  • специфических платформ (WebView, Electron)

Связь с конфигурацией и регистрацией драйверов

Перед использованием setDriver пользовательские драйверы должны быть зарегистрированы:

localforage.defineDriver(MyDriver);
localforage.setDriver(MyDriver._driver);

Регистрация делает драйвер доступным для выбора, но не активирует его автоматически.


Поведение при повторном вызове

Повторный вызов setDriver:

  • останавливает текущий драйвер
  • инициализирует новый
  • сбрасывает внутренние кэши операций
  • не удаляет уже сохранённые данные

Данные остаются привязанными к конкретному backend и не мигрируют автоматически между драйверами.