如何访问
的结果tx.executeSql('select query for a table',[],sucessCB);
function sucessCB(tx, results){ //<--- this results param
console.log(results.row.item(0).name);
}
我试过像
这样的东西function(){
var tab = [];
tx.executeSql('select query for a table',[],sucessCB);
function sucessCB(tx, results){ //<--- this results param
console.log(results.row.item(0).name);
for(i=0;i<results.length;i++){
tab.push(results.row.item(i))
}
}
console.log(tab); //<--- this returns always null
}
如何访问回调函数之外的变量,或者是否有办法直接将sql结果存储在变量中。有没有办法在
中再次将变量发送到回调函数tx.executeSql('another select query',[],function(tx, results, tab ){ // <-- this inside sucessCB
console.log(tab);
});
在所有情况下,变量都为null。还有另一种方法可以做到这一点。任何建议都会有所帮助,谢谢。
答案 0 :(得分:5)
您使用回调如下:
var querySql = function(sql, callback) {
tx.executeSql(sql,[],sucessCB);
function sucessCB(tx, results){ //<--- this results param
var tab = [];
for(i=0;i<results.length;i++){
tab.push(results.row.item(i))
}
callback(tab);
}
}
querySql('select query for a table', function(result) {
console.log(result);
}
然而,使用Deferred concept可以更好地解决这类问题。
var querySql = function(sql) {
var df = $.Deferred();
tx.executeSql(sql,[],sucessCB, errCB);
function sucessCB(tx, results){ //<--- this results param
var tab = [];
for(i=0;i<results.length;i++){
tab.push(results.row.item(i))
}
df.resolve(tab);
}
function errCB(tx, e) {
df.reject(e);
}
}
querySql('select query for a table').done(function(result) {
console.log(result);
}