我有以下代码:
function getRetailerName(retailerID) {
var retailerName;
db.transaction(function retName(qry) {
qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
var len1 = results1.rows.length;
var retailerName;
for (var i1 = 0; i1 < len1; i1++) {
retailerName = results1.rows.item(i1).retailerName;
//alert(results1.rows.item(i1).retailerName);
}
});
return retailerName;
});
alert(retName());
}
我试图从内部函数retName()
获取值并最终调用getRetailerName()
以从数据库中获取值,但是它一直给我一个retName
不是的错误定义
我在这里尝试了很多,
答案 0 :(得分:3)
你不能这样做,因为它是异步的。当您从函数返回时,查询尚未完成。相反,传递一个回调来执行:
function getRetailerName(retailerID, callback) {
var retailerName;
db.transaction(function retName(qry) {
qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
var len1 = results1.rows.length;
var retailerName;
for (var i1 = 0; i1 < len1; i1++) {
retailerName = results1.rows.item(i1).retailerName;
callback(retailerName);
}
});
});
}
getRetailerName(1, function(name) {
alert(name);
});
答案 1 :(得分:1)
你不能(因为retName
命名函数表达式只在其中可用)并且你不应该尝试这样做(因为函数是异步的并且它不起作用)。相反,使用回调:
function getRetailerName(retailerID, callback) {
var retailerName;
db.transaction(function retName(qry) {
qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
var len1 = results1.rows.length;
for (var i1 = 0; i1 < len1; i1++) {;
callback(results1.rows.item(i1).retailerName);
}
});
});
}
getRetailerName(1, alert.bind(window));