访问嵌套函数结构中的JavaScript父函数变量
我的代码在phonegap应用程序中。在执行SELECT SQL语句时,我遇到了将结果传递给父函数变量的困难。代码如下所示:访问嵌套函数结构中的JavaScript父函数变量,javascript,cordova,web-sql,Javascript,Cordova,Web Sql,我的代码在phonegap应用程序中。在执行SELECT SQL语句时,我遇到了将结果传递给父函数变量的困难。代码如下所示: function db_data(query) { var result_out; db.transaction(function (tx) { tx.executeSql(query, [], function (tx, results) { console.log("RETURNED SUCCESSFUL RESULTS"); // SUCCE
function db_data(query) {
var result_out;
db.transaction(function (tx) {
tx.executeSql(query, [], function (tx, results) {
console.log("RETURNED SUCCESSFUL RESULTS"); // SUCCESSFULLY EXECUTING HERE.
result_out = results.rows;
}, function (){
console.log("Error on executing sql");
result_out = false;
});
});
console.log(result_out); // NOTHING LOGGING HERE.
return result_out;
}
此函数用于传递公共SELECT语句。函数没有返回任何内容,返回的对象仅成功记录在SQL执行函数中。这是因为db操作是异步的。值
result\u out
在执行sql之前打印出来。您应该为db\u数据
提供回调函数
function db_data(query, callback) {
var result_out;
db.transaction(function (tx) {
tx.executeSql(query, [], function (tx, results) {
console.log("RETURNED SUCCESSFUL RESULTS"); // SUCCESSFULLY EXECUTING HERE.
callback(null, result.rows); // <<<<<<<<<<<
}, function (){
callback(new Error('error executing sql')); // <<<<<<<<<<<<<
});
});
}
db_data('select * ....', function (err, rows) {
// do something with rows
})
函数db_数据(查询、回调){
var结果输出;
数据库事务(功能(tx){
tx.executeSql(查询,[],函数(发送,结果){
console.log(“返回的成功结果”);//在此成功执行。
回调(null,result.rows);//这是因为数据库操作是异步的。值result\u out
是在sql执行之前打印的。您应该为db\u数据提供回调函数
function db_data(query, callback) {
var result_out;
db.transaction(function (tx) {
tx.executeSql(query, [], function (tx, results) {
console.log("RETURNED SUCCESSFUL RESULTS"); // SUCCESSFULLY EXECUTING HERE.
callback(null, result.rows); // <<<<<<<<<<<
}, function (){
callback(new Error('error executing sql')); // <<<<<<<<<<<<<
});
});
}
db_data('select * ....', function (err, rows) {
// do something with rows
})
函数db_数据(查询、回调){
var结果输出;
数据库事务(功能(tx){
tx.executeSql(查询,[],函数(发送,结果){
console.log(“返回的成功结果”);//在此成功执行。
回调(null,result.rows);//操作是异步的。db.transaction
中的操作可能会在以后生效。当您记录结果时,它还不存在
如果您想在获取result\u out
的值后执行某些操作,则需要将其放入回调中:
function db_data(query,callback) {
var result_out;
db.transaction(function (tx) {
tx.executeSql(query, [], function (tx, results) {
console.log("RETURNED SUCCESSFUL RESULTS"); // SUCCESSFULLY EXECUTING HERE.
callback.call(this,results.rows);
}, function (){
console.log("Error on executing sql");
callback.call(this,false);
});
});
}
使用db_数据时,而不是
var result = db_data('your query');
//do something with result
改为这样做
db_data('your query',function(result){
//do something with result here
//result will either be a false or the result
});
操作是异步的。db.transaction
中的操作可能会在以后生效。当您记录结果时,它还没有生效
如果您想在获取result\u out
的值后执行某些操作,则需要将其放入回调中:
function db_data(query,callback) {
var result_out;
db.transaction(function (tx) {
tx.executeSql(query, [], function (tx, results) {
console.log("RETURNED SUCCESSFUL RESULTS"); // SUCCESSFULLY EXECUTING HERE.
callback.call(this,results.rows);
}, function (){
console.log("Error on executing sql");
callback.call(this,false);
});
});
}
使用db_数据时,而不是
var result = db_data('your query');
//do something with result
改为这样做
db_data('your query',function(result){
//do something with result here
//result will either be a false or the result
});
result.rows
中是否有内容?您是否尝试过console.log其值?它将结果记录在函数中。result.rows
中是否有内容?您是否尝试过console.log其值?它将结果记录在函数中。谢谢,两个答案都相同。谢谢,两个答案都相同。