Javascript函数返回其他函数中未定义的

Javascript函数返回其他函数中未定义的,javascript,function,cordova,Javascript,Function,Cordova,我有一个函数,我想在另一个函数中调用它来获取API密钥。如果我这样做,返回值是未定义的 我怎样才能解决这个问题 function getApiKey(callback) { var db = app.db; db.transaction( function (tx) { tx.executeSql("SELECT api_key FROM settings WHERE id='1'", [], function (tx, result)

我有一个函数,我想在另一个函数中调用它来获取API密钥。如果我这样做,返回值是未定义的

我怎样才能解决这个问题

function getApiKey(callback) {

    var db = app.db;

    db.transaction(
        function (tx) {
            tx.executeSql("SELECT api_key FROM settings WHERE id='1'", [], function (tx, result) {
                var apiKey = result.rows.item(0).api_key;

                alert(apiKey); // here it works

                return apiKey;

            });
        }
    );
}

function getData() {

    var myKey = getApiKey();

    alert(myKey); // undefined

}

您有一个
回调
作为参数传递,请使用它!您不能通过异步调用
返回

function getApiKey(callback) {
    var db = app.db;
    db.transaction(function (tx) {
        tx.executeSql("SELECT api_key FROM settings WHERE id='1'", [], function (tx, result) {
            var apiKey = result.rows.item(0).api_key;
            callback(apiKey);
        });
    });
}

function getData() {
    getApiKey(function(key) {
        var myKey = key;

        /* Any logic with myKey should be done in this block */
    });
}

您有一个
回调
作为参数传递,请使用它!您不能通过异步调用
返回

function getApiKey(callback) {
    var db = app.db;
    db.transaction(function (tx) {
        tx.executeSql("SELECT api_key FROM settings WHERE id='1'", [], function (tx, result) {
            var apiKey = result.rows.item(0).api_key;
            callback(apiKey);
        });
    });
}

function getData() {
    getApiKey(function(key) {
        var myKey = key;

        /* Any logic with myKey should be done in this block */
    });
}

为什么不在getApiKey函数中创建一个局部变量并为其分配apiKey呢

function getApiKey(callback) {
     var returnApiKey = "";
     var db = app.db;

     db.transaction(
         function (tx) {
            tx.executeSql("SELECT api_key FROM settings WHERE id='1'", [],        function (tx, result) {
                        var apiKey = result.rows.item(0).api_key;

                        alert(apiKey); // here it works

                        returnApiKey = apiKey;

                    });
                });
  return returnApiKey;
}


function getData() {

   var myKey = getApiKey();

   alert(myKey); // undefined

}

为什么不在getApiKey函数中创建一个局部变量并为其分配apiKey呢

function getApiKey(callback) {
     var returnApiKey = "";
     var db = app.db;

     db.transaction(
         function (tx) {
            tx.executeSql("SELECT api_key FROM settings WHERE id='1'", [],        function (tx, result) {
                        var apiKey = result.rows.item(0).api_key;

                        alert(apiKey); // here it works

                        returnApiKey = apiKey;

                    });
                });
  return returnApiKey;
}


function getData() {

   var myKey = getApiKey();

   alert(myKey); // undefined

}

您应该使用他们提供的可能重复的回调,我看到了SQL注入漏洞吗?您应该使用他们提供的可能重复的回调,我看到了SQL注入漏洞吗?tx.executeSql做什么。它正在启动ajax调用吗?它正在对您的ajax请求参数执行异步操作。您可以指定async:true/false使请求阻塞/非阻塞,直到得到响应。tx.executeSql做什么。它正在启动ajax调用吗?它正在对您的ajax请求参数执行异步操作。您可以指定async:true/false使请求阻塞/非阻塞,直到得到响应。感谢您的响应。到达那里。但是如果我做了一个警报(我的钥匙);-在getData函数中,只有在getApiKey中执行该操作时,它才起作用。如果我在那之后再这样做就不会了。@LeonvanderVeen——是的——这就是异步的本质。您需要在回调中执行您的逻辑。感谢您的回复。到达那里。但是如果我做了一个警报(我的钥匙);-在getData函数中,只有在getApiKey中执行该操作时,它才起作用。如果我在那之后再这样做就不会了。@LeonvanderVeen——是的——这就是异步的本质。您需要在回调中执行逻辑。