在Javascript中访问嵌套函数

时间:2013-02-27 11:27:05

标签: javascript function

我有以下代码:

function getRetailerName(retailerID) {
    var retailerName;
    db.transaction(function retName(qry) {
        qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
            var len1 = results1.rows.length;
            var retailerName;
            for (var i1 = 0; i1 < len1; i1++) {
                retailerName = results1.rows.item(i1).retailerName;
                //alert(results1.rows.item(i1).retailerName);
            }
        });
        return retailerName;
    });
    alert(retName());
}

我试图从内部函数retName()获取值并最终调用getRetailerName()以从数据库中获取值,但是它一直给我一个retName不是的错误定义

我在这里尝试了很多,

2 个答案:

答案 0 :(得分:3)

你不能这样做,因为它是异步的。当您从函数返回时,查询尚未完成。相反,传递一个回调来执行:

function getRetailerName(retailerID, callback) {
    var retailerName;
    db.transaction(function retName(qry) {
        qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
            var len1 = results1.rows.length;
            var retailerName;
            for (var i1 = 0; i1 < len1; i1++) {
                retailerName = results1.rows.item(i1).retailerName;
                callback(retailerName);
            }
        });
    });
}

getRetailerName(1, function(name) {
    alert(name);
});

答案 1 :(得分:1)

你不能(因为retName命名函数表达式只在其中可用)并且你不应该尝试这样做(因为函数是异步的并且它不起作用)。相反,使用回调:

function getRetailerName(retailerID, callback) {
    var retailerName;
    db.transaction(function retName(qry) {
        qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
            var len1 = results1.rows.length;
            for (var i1 = 0; i1 < len1; i1++) {;
                callback(results1.rows.item(i1).retailerName);
            }
        });
    });
}

getRetailerName(1, alert.bind(window));
相关问题