Sat*_*Raj 2 javascript callback web-sql cordova
如何获得结果
tx.executeSql('select query for a table',[],sucessCB);
function sucessCB(tx, results){ //<--- this results param
console.log(results.row.item(0).name);
}
Run Code Online (Sandbox Code Playgroud)
我尝试了类似的东西
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
}
Run Code Online (Sandbox Code Playgroud)
如何在回调函数之外访问变量,或者是否有直接将sql结果存储在变量中的方法。有没有一种方法可以将变量再次发送到回调函数中
tx.executeSql('another select query',[],function(tx, results, tab ){ // <-- this inside sucessCB
console.log(tab);
});
Run Code Online (Sandbox Code Playgroud)
在所有情况下,变量均为null。还有另一种方法可以做到这一点。任何建议都会有所帮助,谢谢。
您可以使用以下回调:
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);
}
Run Code Online (Sandbox Code Playgroud)
但是,通过使用Deferred概念可以更好地解决此类问题。
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4302 次 |
| 最近记录: |