我正在尝试创建一个函数,该函数使用带有Apache Cordova 2.9.0 API的JavaScript在SQLite数据库中返回表中的行数。我遇到以下问题,函数返回后执行回调... 以下是代码:http://pastebin.com/eFin9yyJ
警报"全球性的"弹出早于" temp" +计数器
我尝试使用一些超时但奇怪的事情发生了,我卡住了
答案 0 :(得分:0)
您可能需要的是将函数作为参数使用回调函数,当值准备就绪时(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函数,该函数作为上层函数的参数回调给出,其中包含从数据库中获取的值。
如果你不熟悉回调和异步编程,请告诉我,这样我可以改进我的答案,使其更容易理解。