2014-10-28 3 views
1

У меня есть цикл в функции в структуреJavaScript обратных вызовов в течение цикла

func(var, callback) { 
    for(i = 0; i < len; i++) { 
     validate(var, function(value) { 
      if (!value) { callback(value) } 
     } 
    } 
callback(true); 
} 

где функция Validate возвращает логическое значение. Я бы просто хотел вызвать мой callback с true, если он не был вызван раньше. Я попытался вернуть доход после callback(value), но это не помогло.

+0

'var' как имя переменной? и 'i' является глобальным. – epascarello

+0

Это верно для этого примера кода. В моем фактическом коде у меня есть значимые имена переменных, и мой контроль цикла не является глобальной переменной. Я просто решил использовать это имя и не беспокоиться об объеме i, потому что это не имело отношения к вопросу, который я задавал. – somethingShiny

ответ

1

Установите флаг:

function func(foo, callback) { 
    var called = false; 
    for(var i = 0; i < len; i++) { 
     validate(foo, function(value) { 
      if (!value) { 
       called = true; 
       callback(value); 
      } 
     }) 
    } 
    if (!called) { 
     callback(true); 
    } 
} 
+0

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

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