【问题标题】:SQLite with JavaScript, creating function returning count of rows使用 JavaScript 的 SQLite,创建返回行数的函数
【发布时间】:2014-12-17 14:27:27
【问题描述】:

我正在尝试使用带有 Apache Cordova 2.9.0 API 的 JavaScript 创建函数,该函数返回 SQLite 数据库中我的表中的行数。我遇到了以下问题,回调在函数返回后执行...... 这是代码:http://pastebin.com/eFin9yyJ

警报“global yemp”早于“temp”+计数器弹出

我尝试使用一些超时,但奇怪的事情发生了,我卡住了

【问题讨论】:

    标签: javascript sqlite cordova


    【解决方案1】:

    您可能想要的是将一个回调函数作为参数传递给您的函数,当值准备好(DB 已返回它)时,使用该值调用该函数。示例:

    var cb = function(value) {
        alert("Got value: " + value);
    }
    
    function getNumberOfRecords(name, callback) {
            var temp = 0;
            db.transaction(querySelect, onError);
            function querySelect(tx) {
                //results.rows.length
                tx.executeSql("SELECT count(*) as counter from "+name, [], function (tx, results) {
                            alert(results.rows.item(0).counter);
                            temp = results.rows.item(0).counter;
                            alert("temp = "+ temp);
                            callback(temp);
                        },
                        function (error) {
                            console.log("Cannot read dat data!" + error.message + " z " + name);
                        });
            }
    }
    
    getNumberOfRecords("as", cb);
    

    在示例中,我们首先声明一个名为 cb 的函数,它接受一个参数(从数据库中获取的值)。它作为参数传递给 getNumberOfRecords,它再次连接到数据库并为数据库提供一个回调函数,该函数在您的代码匿名函数中:

    function (tx, results)
    

    数据库调用这个函数,当找到数据然后你调用初始的cb函数,它作为上层函数的参数回调,在它里面带有从数据库中获取的值。

    如果您对回调和异步编程不太熟悉,请告诉我,以便我改进答案,使其更易于理解。

    【讨论】:

    • 非常感谢,这几乎可以完美运行。我只有一个小问题,下面的代码:pastebin.com/AC9WxsGp 执行了两次。你能给我提示一下发生了什么问题吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2019-10-18
    • 1970-01-01
    • 2019-10-27
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多