繁体   English   中英

函数返回未定义的变量

[英]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.transactionexequteSql是异步函数。 他们不会立即得到答案,这就是为什么要将功能传递给他们的原因。 一旦得到答案,他们就会调用您的函数,称为回调。 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,并且有很多陷阱和怪异之处。 这需要一些习惯。

您所做的工作有两个同样严重的问题:

  1. 您的外部函数不返回任何内容。 代码中唯一的return语句是从传递给localDatabase.transaction内部函数返回。

    像这样:

     function myFunction inner_function = function () { return 3; # Return from inner function, *not* myFunction } } 
  2. 即使你试图从你的内部函数的通信的价值,外部函数,然后从外部函数返回时,它仍然是行不通的; 内部函数被异步调用。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM