从外部sqlite查询更新和/或更改localStorage数据库

时间:2013-12-31 20:15:17

标签: javascript ios sqlite cordova

我对localStorage有几个问题。

1

当我尝试从我的Cordova应用程序更新localStorage数据库(在iOS WebView中)时,我发现了一些奇怪的行为。

当我在外部数据库浏览器中打开数据库时,我可以看到更新,但在Safari的Web检查器中看不到它们。更新后第一次对LocalStorage的JS调用会删除所有更改并将其恢复到外部调用之前的状态,有点像是在内存中缓存了吗?

有什么想法吗?有没有办法强制浏览器从磁盘重新加载?

2

我编写了一个连接到sqlite数据库的Cordova插件,可以在localStorage“replica”基于键值的数据库中添加,更新,删除等项目。

但是我希望能够使用类似localStorage.getValue('foo')的原型进行存档; 我只是无法让它工作......我理解异步调用的概念等,但必须有一种方法。

到目前为止,我已经尝试过循环和超时。 - >导致浏览器冻结。

是否可以根据我的规范进行“单线程”来检索没有回调的db值?

1 个答案:

答案 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将]运行一系列函数,每个函数运行一次   之前的功能已经完成。如果系列中的任何功能通过   它的回调错误,不再运行函数和回调   系列会立即调用错误值。一旦   任务完成后,结果将传递给最终回调   作为一个数组。