访问嵌套函数结构中的JavaScript父函数变量

访问嵌套函数结构中的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

我的代码在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"); // 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其值?它将结果记录在函数中。谢谢,两个答案都相同。谢谢,两个答案都相同。