Как правильно использовать localForage с Cordova?
Я пытаюсь использовать localForage с https://github.com/thgreasi/localForage-cordovaSQLiteDriver для настройки постоянного хранилища в приложении cordova. Это не работает, и я продолжаю получать следующие записи в консоли:
Я не уверен, что понимаю localforage
Жизненный цикл правильно. Вот что у меня есть:
// 1) setup cordova SQL lite driver
localforage.defineDriver(window.cordovaSQLiteDriver).then(function() {
// 2) set preferred driver order
return localforage.setDriver([
window.cordovaSQLiteDriver._driver, // <-- prefer cordovaSQLiteDriver
localforage.INDEXEDDB,
localforage.WEBSQL,
localforage.LOCALSTORAGE
]);
})
.then(function() {
// 3) wait for localForage to be ready
return localforage.ready();
})
.then(function() {
// 4) create a globally scoped app database
window.appStorage = localforage.createInstance({
version: 1.0,
size: 52428800, // 50mb
name: 'my-app-name',
storeName: 'setup'
});
// 5) check if we're using cordova sql lite
if (localforage.driver() !== window.cordovaSQLiteDriver._driver) {
console.warn('Not using cordovaSQLiteDriver.');
}
// 6) write something
return appStorage.setItem('message', 'It worked!'); // <-- only it doesn't
})
.then(function() {
// 7) get the value back out of the database
return appStorage.getItem('message');
})
.then(function(message){
// 8) write the value to the console
console.log(message);
});
На мой взгляд, это должно быть печать Это сработало! на консоль.
1 ответ
Итак, прежде всего, createInstance()
возвращает совершенно новый и не связанный экземпляр localforage и реинициализируется с нуля. Поэтому новый экземпляр будет пытаться определить, какой драйвер использовать, используя порядок предпочтений драйвера по умолчанию (IndexedDB, WebSQL, LocalStorage). Единственное, что разделяют все экземпляры localforage - это доступные / определенные драйверы. Так что вы можете сделать что-то вроде этого:
localforage.defineDriver(window.cordovaSQLiteDriver).then(function() {
window.appStorage = localforage.createInstance({
version: 1.0,
size: 52428800, // 50mb
name: 'my-app-name',
storeName: 'setup',
driver: [
window.cordovaSQLiteDriver._driver, // <-- prefer cordovaSQLiteDriver
localforage.INDEXEDDB,
localforage.WEBSQL,
localforage.LOCALSTORAGE
]
// OR instead of passing the `driver` option,
// you can call `window.appStorage.setDriver()`
// right after `createInstance()`
});
if (window.appStorage.driver() !== window.cordovaSQLiteDriver._driver) {
console.warn('Not using cordovaSQLiteDriver before setItem.');
}
return appStorage.setItem('message', 'It worked!');
})
.then(function() {
return appStorage.getItem('message');
})
.then(function(message){
console.log(message);
if (window.appStorage.driver() !== window.cordovaSQLiteDriver._driver) {
console.warn('Not using cordovaSQLiteDriver after setItem.');
}
});