【问题标题】: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函数,它作为上层函数的参数回调,在它里面带有从数据库中获取的值。
如果您对回调和异步编程不太熟悉,请告诉我,以便我改进答案,使其更易于理解。