将 localForage 与 Cordova 一起使用的正确方法是啥?
Posted
技术标签:
【中文标题】将 localForage 与 Cordova 一起使用的正确方法是啥?【英文标题】:What is the correct way to use localForage with Cordova?将 localForage 与 Cordova 一起使用的正确方法是什么? 【发布时间】:2018-04-10 19:53:40 【问题描述】:我正在尝试使用localForage 和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);
);
在我看来,它应该将 It works! 打印到控制台。
【问题讨论】:
【参考方案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.');
);
【讨论】:
谢谢,非常感谢!我花了一天时间试图弄清楚这一点......文档确实需要更新以解释生命周期,或者至少给出一个这样的例子^^以上是关于将 localForage 与 Cordova 一起使用的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 localforage 迭代显示或映射到 html 元素 <p>
使用 $localForage.setItem 时,应用程序会冻结几秒钟