2015-07-24 3 views
0

У меня проблема с неопределенным массивом, и я не могу понять, почему.Array undefined вне функции времени исполнения

Объявляю переменную ul, затем я получаю массив из хранилища и назначаю его ul, если я пытаюсь работать с ним внутри функции get, он работает, я могу делать все, что захочу, если я пытаюсь что-либо сделать с внешней функцией get он просто говорит, что он не определен.

function getUserList() 
    { 
     var ul; 
     chrome.storage.local.get({'users':[]}, function(result){ //get user array from storage 
      ul = result.users; //get users from result 
      console.log(ul); <-this works 
     }); 
     console.log(ul); <- this does not 
     hideSubmissions(ul); <- or this 
     hideComments(ul); <- or this 
    }; 

getUserList(); 

Я могу переместить все, что использует ул в функцию получить, но я хотел бы знать, почему это необходимо, единственное, что я могу догадаться, что это как-то выходит за рамки, но я не» Посмотрите, как.

+1

'console.log (ul);' выполняется до завершения 'local.get()'. Просто напишите их внутри. Это происходит потому, что вызовы асинхронны. Вы найдете больше ответов на асинхронный метод stackoverflow. Здесь вы можете начать с http://stackoverflow.com/questions/7779697/javascript-asynchronous-return-value-assignment-with-jquery – Dhiraj

ответ

1

Функция .get запускается асинхронно, поэтому, когда она заканчивается, она вызывает обработчик завершения, который затем вы устанавливаете ul в result.users.

Принимая во внимание, что вы уже вывели (или попытались) ul var, прежде чем устанавливать его.

Как и в комментариях.

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