Метод setDriver используется для явного выбора механизма
хранения данных (драйвера), который будет применяться экземпляром
localForage. Он управляет тем, какая технология будет
использоваться для операций чтения и записи: IndexedDB, WebSQL или
localStorage.
setDriver(driverName: string | string[] | DriverConstructor | DriverConstructor[]): Promise<void>
Возвращаемое значение всегда представляет собой
Promise<void>, который завершается после успешной
инициализации выбранного драйвера или отклоняется при невозможности его
использования.
Внутри localForage реализована система драйверов, позволяющая абстрагироваться от конкретного API браузера. Каждый драйвер — это отдельная реализация хранилища:
Метод setDriver позволяет:
localforage.setDriver('indexedDB');
Строковое значение соответствует зарегистрированному драйверу. В стандартной поставке используются:
'indexedDB''webSQL''localStorage'localforage.setDriver(['indexedDB', 'webSQL', 'localStorage']);
В этом случае библиотека пытается последовательно подключить драйверы в указанном порядке. Первый доступный и успешно инициализированный драйвер становится активным.
localforage.setDriver([
CustomDriver,
localforage.INDEXEDDB,
localforage.LOCALSTORAGE
]);
Возможна передача не только строковых идентификаторов, но и самих драйверов (или их конструкторов). Это используется при расширении функциональности через пользовательские реализации.
При вызове setDriver выполняется несколько этапов:
Проверяется, зарегистрирован ли драйвер в системе localForage. Если
драйвер неизвестен — возвращается отклонённый Promise.
Каждый драйвер обязан реализовывать метод
._initStorage(), который подготавливает внутреннее
хранилище:
После успешной инициализации активный драйвер заменяется внутри
текущего экземпляра. Все последующие операции (getItem,
setItem, removeItem) начинают использовать
новый backend.
При передаче массива setDriver работает по стратегии
fallback:
Такой механизм обеспечивает устойчивость работы в условиях:
Метод всегда возвращает Promise:
localforage.setDriver('indexedDB')
.then(() => {
// драйвер успешно установлен
})
.catch((err) => {
// ошибка выбора драйвера
});
Асинхронная модель обусловлена тем, что инициализация некоторых драйверов (особенно IndexedDB) требует неблокирующих операций.
Важно учитывать, что setDriver влияет только на
конкретный экземпляр:
const storeA = localforage.createInstance();
const storeB = localforage.createInstance();
storeA.setDriver('indexedDB');
storeB.setDriver('localStorage');
Каждый экземпляр хранит собственную конфигурацию и не разделяет активный драйвер с другими инстансами.
Типичные причины отклонения Promise:
По умолчанию localForage использует следующий порядок:
Метод setDriver позволяет полностью переопределить этот
порядок, что критично для:
Перед использованием setDriver пользовательские драйверы
должны быть зарегистрированы:
localforage.defineDriver(MyDriver);
localforage.setDriver(MyDriver._driver);
Регистрация делает драйвер доступным для выбора, но не активирует его автоматически.
Повторный вызов setDriver:
Данные остаются привязанными к конкретному backend и не мигрируют автоматически между драйверами.