我创建了一个函数 myFunction,它执行简单的任务,即从 sqlite 数据库中检索数据并将其保存在一个易于使用的数组中。此功能应遵循这些步骤来实现我的功能。
- 从数据库中检索数据。
- 将其保存到数组中。
- 返回数组
但它是按此顺序执行这些步骤的;3、1、2,所以我没有得到数据,因为它没有得到它就返回。
例如
function myFunction() {
var ret;
var arr = [];
db.transaction(function (trans) {
trans.executeSql('SELECT * FROM tblname', [],
function (transaction, result) {
if (result != null && result.rows != null) {
for (var i = 0; i < result.rows.length; i++) {
var row = result.rows.item(i);
ret = row.urlcolmn;
arr.push(ret);
alert('alert 1'); // just to check which line(alert) is called first
}
}
}, errorHandler);
}, errorHandler, nullHandler);
alert('alert 2'); // just to check which line(alert) is called first
return arr;
}
在上面的代码中,警报 2 显示在警报 1 之前.....这就是它不在数组中返回值的原因。这个问题可能是因为 JS 中的 sqlite 是异步的。