2015-03-17 5 views
1

У меня довольно простые вопросы о цикле for в javascript. Я пытаюсь увеличить значение (j в моем коде) после того, как я запустил метод, объявляющий метод обратного вызова, и в этой функции я увеличиваю значение. Но мой код ломается, и я не уверен, что это действительный JavaScript. Но везде я проверяю это верно Javascript код:value ++ in for loop

http://www.w3schools.com/js/js_loop_for.asp

как один на один, Statement 3

Вот мой код:

for(j=0; j <= 5;) 
{ 

    var keyContent = window.localStorage[window.localStorage.key(j)]; 
    console.log(keyContent); 
    var dataForm = JSON.parse(keyContent); 

    uploadDataAndImage(dataForm, function(data) { 
     console.log(data); 
     if(data){ 

      console.log("Data good"); 
      j++; 
     } 
     else 
     { 

      console.log("Data bad"); 
      break; 
     } 
    });   
} 

EDIT: Сделано это работает, делая это:

var formDataArray = []; 
for(j=0; j <= 5; j++) 
{ 

    var keyContent = window.localStorage[window.localStorage.key(j)]; 
    console.log(keyContent); 
    var dataForm = JSON.parse(keyContent); 
    formDataArray[j] = JSON.parse(keyContent);      
    uploadDataAndImage(formDataArray[j], function(data) { 
     console.log(data); 
     if(data){ 

      console.log("Data good"); 

     } 
     else 
     { 

      console.log("Data bad"); 
      return; 
     } 
    });   
} 
+0

Increment J в течение цикла, как (J ++) – stanze

+0

'uploadDataAndImage' является асинхронным, не так ли? Это не будет работать с циклом for. – Bergi

+0

Да, это асинхронно. Я сделал это с помощью обходного пути, см. Мое редактирование. –

ответ

-1

Проблема в вашем коде не в цикле, а в break заявление. Я предлагаю вам изменить его на return заявление

for(j=0; j <= 5;) 
{ 

    var keyContent = window.localStorage[window.localStorage.key(j)]; 
    console.log(keyContent); 
    var dataForm = JSON.parse(keyContent); 

    uploadDataAndImage(dataForm, function(data){ 
    console.log(data); 
    if(data){ 

     console.log("Data good"); 
     j++; 
    } 
    else 
    { 

     console.log("Data bad"); 
     return; 
    } 
    }); 

} 
+0

Не работает, приложение просто зависает и падает. Если я поставил j ++ в сам цикл for, например: for (j = 0; j <= 5; j ++), он работает, но все не загружается хорошо, потому что он выполняет код до его завершения, поэтому я хотел его увеличить обратный вызов –

0

Если вам нужно увеличивать в пределах вашего цикла, то, что вам нужно, это в то время как петля:

var j = 0; 
while (j <= 5) { 
    var keyContent = window.localStorage[window.localStorage.key(j)]; 
    console.log(keyContent); 
    var dataForm = JSON.parse(keyContent); 

    uploadDataAndImage(dataForm, function(data) { 
    console.log(data); 
    if(data){ 
     console.log("Data good"); 
     j++; 
    } else { 
     console.log("Data bad"); 
     break; 
    } 
    });   
} 
+0

Нет. Использование цикла 'for' отлично работает и будет работать одинаково. – Bergi