[英]function returning undefined variable
我有一个简单的函数来计算数据库中的行数并返回结果。 但是,即使我在console.log中从功能内部正确显示结果,我仍得到未定义返回的结果。 这是我正在做的要旨,尽管我已经剥离了很多代码来简化它。
$('#roomsList').append(getCount(currentRow.roomtype));
function getCount(roomtype) {
var query = "SELECT COUNT(*) FROM fixturesfittings WHERE roomtype = ?;"
localDatabase.transaction(function (trxn) {
trxn.executeSql(query, [propertyid,roomtype],function (transaction, results) {
return results.rows.item(0)["COUNT(*)"];
},errorHandler);
});
}
谁能帮我?
问题是localDataBase.transaction
和exequteSql
是异步函数。 他们不会立即得到答案,这就是为什么要将功能传递给他们的原因。 一旦得到答案,他们就会调用您的函数,称为回调。 在getCount
早已消失之后,这将在执行周期的稍后时间发生。
因此, getCount
调用localDatabase.transaction
,它可以正常工作但没有立即可用的任何内容,因此getCount
在数据可用之前完成,因此getCount
返回未定义(JavaScript函数中的默认返回值)。
您可能需要将代码重新整理为以下形式:
getCount(function(count) {
$('#roomsList').append(count);
});
function getCount(callback) {
var query = '...';
localDatabase.transaction(function(trxn) {
trxn.exequteSql(query, ... function(transaction, results) {
callback(results);
});
}
}
这是一种非常常见的模式JavaScript,并且有很多陷阱和怪异之处。 这需要一些习惯。
您所做的工作有两个同样严重的问题:
您的外部函数不返回任何内容。 代码中唯一的return
语句是从传递给localDatabase.transaction
的内部函数返回。
像这样:
function myFunction inner_function = function () { return 3; # Return from inner function, *not* myFunction } }
即使你正试图从你的内部函数的通信的价值,外部函数,然后从外部函数返回时,它仍然是行不通的; 内部函数被异步调用。 在getCount
完成执行并返回undefined
之后很久以后,就会在将来的某个时刻调用内部return results...
您需要以某种形式的回调传递给getCount
; 回调将在以后被调用并传递计数。 这样想:
function myFunc(callback) { function inner_function = function(callback) { // Invoke our callback sometime in the future setTimeout(1000, callback); } // Inner function does some processing at some future time; // give it a callback to invoke when its processing is done inner_function(callback); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.