2016-09-02 2 views
0

Я работаю над анимацией/холстом холста, и у меня возникают проблемы с циклом for in в одной из моих функций. В пространстве интересов я удалил некоторый код.Для цикла, не работающего с глобальной переменной пространства имен

function LoadScene(){ // function with the issue 
       console.dir(game.frames); //195 objects 0{}, 1{}, 2{}, etc. 
       for (var prop in game.frames){ 
        console.log(prop); //Does not get here 
        if (game.frames[prop].scene == game.currentScene){ 
         game.sceneData.push(game.frames[prop]); 
        } 
       } 
      } 

function LoadFrames(){ 
       //xhr request 
       // if successs load json data into namespace variable 
       // get canvas 
       // drawImage Loading Screen 
       // return true 

} 


function StartGame(){ 
    if(LoadFrames()){ 
     LoadScene(); 
    } 
} 

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

+0

'просто терпит неудачу' каким образом? ошибка в консоли? никогда не входит в цикл? кастрирует вашу собаку? –

+0

* «Я думаю, что это тоже может быть асинхронная проблема» * - Я думаю, что это все. Можете ли вы вызвать 'LoadScene()' из кода 'LoadFrames()' Ajax или использовать механизм обещаний или обратного вызова, чтобы дождаться завершения загрузки? – nnnnnn

+0

Вам нужно вызвать 'LoadScene()' из функции 'xhr.onreadystatechange'. – Barmar

ответ

0
function LoadFrames(){ 
      //xhr request 
      // if successs load json data into namespace variable 
      // get canvas 
      // drawImage Loading Screen 
      // return true 
} 

XMLHttpRequest в пределах LoadFrames могут работать асинхронно, в то время как LoadFrames работает синхронно. LoadFrames всегда возвращает true сразу после отправки запроса AJAX, независимо от того, были ли загружены фреймы (возможно, вы имеете в виду game.frames?); то есть , он не проверяет ответ запроса.

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