使用SQLite的Apache Cordova-迫不及待地返回数据
我想将数据保存到myData中使用SQLite的Apache Cordova-迫不及待地返回数据,sqlite,cordova,Sqlite,Cordova,我想将数据保存到myData中 function outDb(outData) { var temp; var db = window.sqlitePlugin.openDatabase({ name: "test" }); db.executeSql("SELECT " + outData + " FROM test", [], function (res) { switch (outData) {
function outDb(outData) {
var temp;
var db = window.sqlitePlugin.openDatabase({ name: "test" });
db.executeSql("SELECT " + outData + " FROM test", [], function (res) {
switch (outData) {
case "goal": temp = res.rows.item(0).GOAL;
break;
case "curDate": temp = res.rows.item(0).CURDATE;
break;
case "Day1": temp = res.rows.item(0).DAY1;
break;
case "Day2": temp = res.rows.item(0).DAY2;
break;
case "Day3": temp = res.rows.item(0).DAY3;
break;
default: temp = "is default";
}
});
return temp;
}
但这不起作用,因为return语句的执行速度比分配给变量的数据快
我能做什么?所有sqlite命令都是事件驱动的。这意味着您必须等待值,直到事件完成 在您的情况下:您永远不会得到返回值,因为您的返回超出了success函数的范围 您可以重写函数,如: 函数outDboutData{ 无功温度; var db=window.sqlitePlugin.openDatabase{name:test}; db.executeSqlSELECT+outData+来自测试[],函数res{ 切换输出数据{ 案例目标:temp=res.rows.item0.goal; 打破 案例curDate:temp=res.rows.item0.curDate; 打破 案例第1天:temp=res.rows.item0.Day1; 打破 案例第2天:temp=res.rows.item0.Day2; 打破 案例第3天:temp=res.rows.item0.Day3; 打破 默认值:temp=为默认值; } 返回温度; };
} 您应该使用回调函数,因为Cordova sqlite存储是异步工作的
var myData = outDb("goal");
function getFromDB(_n, fn) {
var db = ...
db.transaction(function(tx) {
var query = "SELECT * FROM <table_name> WHERE <field_name> = ?";
tx.executeSql(query, [_n], function (tx, rs) {
for(var x = 0; x < rs.rows.length; x++) {
_res = rs.rows.item(x).value;
fn(_res);
}
}, function (tx, error) {
console.log('select error: ' + error.message);
});
}, function (error) {
console.log('transaction error: ' + error.message);
}, function () {
console.log('transaction ok.');
});}
getFromDB(<name>, function(val) {
console.log(val);});