我试图返回一个通过几个回调函数检索的数字,但是在我的生活中不能弄清楚为什么范围不起作用。目标是返回一个只能在另外两个函数层中访问的值:
function getLastPosition(db) {
var highest; // Declared in method's scope
db.transaction(function (tx) {
tx.executeSql('SELECT max(position) AS highest FROM FRUIT', [], function(tx, result) {
highest = result.rows.item(0).highest;
alert(highest); // Displays the number 2, as it should.
});
});
alert(highest); // Displays 'undefined'!
return highest;
}
我已经阅读Ryan Morr's guide但仍然无能为力......
编辑:所以事实证明这不是范围问题,而是异步执行问题。返回语句在数据库调用完成之前执行。那么,我修改过的问题就是如何在不诉诸更多回调的情况下获得最高价值。
答案 0 :(得分:0)
不知道您的库,但db建议您对数据库进行异步ajax调用。因为它是异步的,所以向服务器发出请求并继续执行尚未定义最高值的下一行。稍后当浏览器收到来自ajax调用的响应时,将执行回调函数并设置最高值。
您可以将回调函数传递给您的函数,并使用最高值替换您的第一个警报,而不是返回最高级别。
function getLastPosition(db, callback) {
var highest;
db.transaction(function (tx) {
tx.executeSql('SELECT max(position) AS highest FROM FRUIT', [], function(tx, result) {
highest = result.rows.item(0).highest;
callback(highest);
});
}); }