【问题标题】:Update and/or alter localStorage database from an external sqlite query从外部 sqlite 查询更新和/或更改 localStorage 数据库
【发布时间】:2014-01-18 17:02:10
【问题描述】:

我有几个关于 localStorage 的问题。

1.

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

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

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

2.

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

但是,我希望能够使用 localStorage.getValue('foo'); 我只是无法让它工作......我理解异步调用等的概念,但必须有办法。

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

是否可以根据我的规范执行“单线”以在没有回调的情况下检索 db 值?

【问题讨论】:

    标签: javascript ios sqlite cordova


    【解决方案1】:

    第 1 项: 抱歉,只是不确定。

    第 2 项:

    也许有更好的方法可以做到这一点,但如果我这样做并且不想直接处理回调,我会使用 async.js 库,网址为:https://github.com/caolan/async

    然后做一些类似的事情:

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

    【讨论】:

    • 谢谢,太好了。我会调查的。
    • 告诉我进展如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2013-10-16
    • 2021-12-22
    • 2012-08-02
    • 2016-10-21
    相关资源
    最近更新 更多