返回的变量为';未定义';通过javascript函数

返回的变量为';未定义';通过javascript函数,javascript,sql,Javascript,Sql,我有点麻烦。。。 我试图将查找结果作为web应用程序的一部分,但遇到了一点小麻烦 我有一个只需点击按钮即可运行的功能: $(function() { $('#bnt_fund_8y').click(function() { console.log(dbCheck("study_mode")); } }); 此dbCheck功能消失,并检查本地数据库,以查看在以下功能中设置了什么学习模式: dbCheck = function(dbSearch) { mydb.t

我有点麻烦。。。 我试图将查找结果作为web应用程序的一部分,但遇到了一点小麻烦

我有一个只需点击按钮即可运行的功能:

$(function() {
    $('#bnt_fund_8y').click(function() {
        console.log(dbCheck("study_mode"));
}
});
此dbCheck功能消失,并检查本地数据库,以查看在以下功能中设置了什么学习模式:

dbCheck = function(dbSearch) {
    mydb.transaction(
        function(transaction) {
            transaction.executeSql('SELECT "'+dbSearch+'" FROM funding WHERE id = 1',[], function(transaction, results) {
                var dbResult = results.rows.item(0).study_mode;
                alert(dbResult);
                return(dbResult);
            }, errorHandler);
        });
    }
警报显示正确的变量,但控制台日志显示未定义。 有关此欢迎的任何帮助…

是一个异步调用,因此您的函数将在您发出的回调
事务发生之前返回(不返回任何值)。代码中的
return
语句不是从
dbCheck
返回任何内容,而是从您提供的回调函数返回

您需要更改函数以及如何调用它

功能更改:

//  add callback parameter --v
dbCheck = function(dbSearch, callback) {
    mydb.transaction(
        function(transaction) {
            transaction.executeSql('SELECT "'+dbSearch+'" FROM funding WHERE id = 1',[], function(transaction, results) {
                var dbResult = results.rows.item(0).study_mode;
                alert(dbResult);
                // Call the callback with the result
                callback(dbResult);
            }, errorHandler);
        });
    }
称之为:

$(function() {
    $('#bnt_fund_8y').click(function() {
        dbCheck("study_mode", function(result) {
            console.log(result);
        });
}
});

不返回任何内容,因此您得到的值是未定义的。由于
transaction
似乎是一个带有回调函数的异步调用,因此返回的唯一有用的东西是承诺
dbResult

您不能从异步调用的回调中返回任何内容。对结果也使用回调:

dbCheck = function(dbSearch, callback) {
  mydb.transaction(
    function(transaction) {
      transaction.executeSql('SELECT "'+dbSearch+'" FROM funding WHERE id = 1',[], function(transaction, results) {
        var dbResult = results.rows.item(0).study_mode;
        callback(dbResult);
      }, errorHandler);
    });
  });
};
用法:

dbCheck("study_mode", function(value) {
  console.log(value);
});
据我所知

函数dbCheck根本没有返回任何内容

mydb.Transaction是实际返回某些内容的函数

正如其他人所指出的,mydb.transaction是异步的

你应该加上

console.log(dbResult);

将回调传递到mydb.transaction

中,这是一种非常有趣的支撑方式。
console.log(dbResult);