我对localStorage有几个问题。
1
当我尝试从我的Cordova应用程序更新localStorage数据库(在iOS WebView中)时,我发现了一些奇怪的行为。
当我在外部数据库浏览器中打开数据库时,我可以看到更新,但在Safari的Web检查器中看不到它们。更新后第一次对LocalStorage的JS调用会删除所有更改并将其恢复到外部调用之前的状态,有点像是在内存中缓存了吗?
有什么想法吗?有没有办法强制浏览器从磁盘重新加载?
2
我编写了一个连接到sqlite数据库的Cordova插件,可以在localStorage“replica”基于键值的数据库中添加,更新,删除等项目。
但是我希望能够使用类似localStorage.getValue('foo')的原型进行存档; 我只是无法让它工作......我理解异步调用的概念等,但必须有一种方法。
到目前为止,我已经尝试过循环和超时。 - >导致浏览器冻结。
是否可以根据我的规范进行“单线程”来检索没有回调的db值?
答案 0 :(得分:0)
第1项: 对不起,只是不确定。
第2项:
可能有更好的方法可以做到这一点,但如果我这样做并且不想直接处理回调,我会使用as https://github.com/caolan/async
中提供的async.js库做类似的事情:
function getValue() {
async.series([
function(callback) {
db.readTransaction(function (t) {
t.executeSql('SELECT COUNT(*) AS c FROM table', [], function (t, r) {
callback(r.rows[0].c);
}, function (t, e) {
console.log(e.message);
});
});
}
],
function(error, results) {
return results[0];
}
);
}
来自文档:
[async.series将]运行一系列函数,每个函数运行一次 之前的功能已经完成。如果系列中的任何功能通过 它的回调错误,不再运行函数和回调 系列会立即调用错误值。一旦 任务完成后,结果将传递给最终回调 作为一个数组。