2013-09-11 4 views
1

Я пытаюсь обновить локальную переменную в функции с возвращенными данными из функции обратного вызова. Но это похоже на то, что функция обратного вызова не имеет к ней доступа.Доступ к локальной переменной из функции обратного вызова

Ниже то, что я работаю с:

this.renderUI = function(res) { 
    var connected = (res.user != null && res.user.isConnected); 
    if(connected) { 
     $j('#jive-modal-invite').trigger('close'); 
     var contactsData = gigya.socialize.getContacts({callback: getContacts_callback }); 
     console.log(contactsData); 
    }else { 
     console.log('openid disconnected'); 
    } 
    }; 

    function getContacts_callback(response) { 
    return response; 
    } 
+0

Обратный вызов является асинхронным, поэтому он не знает о локальная переменная. – Robert

+0

Я что-то упустил? Почему ваш обратный вызов напоминает: 'gigya.socialize.getContacts ({callback: function (response) {' вместо 'gigya.socialize.getContacts (function (response) {'? – Andy

+0

Если 'getContacts' является асинхронным, вы просто не можете (и не должен). Поместите операторы протоколирования (и все остальное, что обращается к «contactData') в обратном вызове – Bergi

ответ

1

console.log(contactsData); это выполняется, прежде чем ваш обратный вызов завершен попробовать это:

gigya.socialize.getContacts({callback: function(response){ 
    contactsData['contacts'] = response; 
    console.log(contactsData); 
    } }); 
+0

Мне нужно 'contactsData' вне области обратного вызова – drecute

+0

Как насчет вызова функции из вашего обратного вызова? – Syd

+0

См. edit.' contactsData' содержит null – drecute

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