2016-04-15 3 views
0
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, но мне было интересно, есть ли способ преодолеть это? Или это невозможно?Изменить переменную снаружи это сфера

Прошу прощения за такой общий вопрос, но я рассмотрел несколько других вопросов, связанных с переполнением стека, и они не помогли, я также попробовал много другого кода, а не этого, но никаких успехов.

ответ

0

EDIT: Хотя мой ответ верен, по-видимому, реальная проблема 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); 
} 
+0

Только что попробовал, все еще возвращает false. – ZeroByter

+0

И? Ваш код по-прежнему печатает 'foobar = false'. И вы закрываете соединение до завершения запроса. – alexmac

+0

Chill. Я предположил синхронизацию. Прочитайте правки перед тем, как писать. Как указано, мои коды журнала истинны. Заметьте, что я определил методы mysql – applejacks01

Смежные вопросы