Javascript函数返回其他函数中未定义的
我有一个函数,我想在另一个函数中调用它来获取API密钥。如果我这样做,返回值是未定义的 我怎样才能解决这个问题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)
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——是的——这就是异步的本质。您需要在回调中执行逻辑。