function get_all_channels_by_order(){
var foobar = false
mysql_connection.connect()
mysql_connection.query("SELECT * FROM channels ORDER BY listorder ASC", function(){
foobar = true
})
mysql_connection.end()
console.log(foobar)
}
我需要foobar
才能返回true
,而是返回false
。
这当然归功于JavaScript范围,但我想知道有没有办法克服这个问题?或者这是不可能的?
我很遗憾地提出这样一个常见问题,但是我已经查看了其他几个Stack Overflow问题并且他们没有帮助,我也尝试了很多其他代码而不是这个但没有成功。
答案 0 :(得分:0)
编辑:虽然我的回答是正确的,但显然OP的真正问题是他在回调之前试图访问一个被回调修改的变量。
尝试以下代码。我创建了一个名为'that'的变量,它存储了对你所在范围的引用。然后,每当我想要正确的foobar时,我只在它前面添加“那个”。
var mysql_connection = {};
mysql_connection.connect = function(){
console.log("call to mysql_connection.connect");
}
mysql_connection.query = function(query,cb){
console.log("call to mysql_connection.query with query of",query);
if(cb){
cb();
}
}
mysql_connection.end = function(){
console.log("call to mysql_connection.end");
}
function get_all_channels_by_order(){
var that = this;
that.foobar = false;
console.log("foobar=",that.foobar);
mysql_connection.connect()
mysql_connection.query("SELECT * FROM channels ORDER BY listorder ASC", function(){
that.foobar = true
})
mysql_connection.end()
console.log("foobar=",that.foobar);
}