обратный вызов вне цикла for, замыкание внутри цикла и «синхронные» события

#javascript

#javascript

Вопрос:

Привет, у меня есть обратный вызов, который вызывается синхронно (т.Е. Я знаю порядок), просто дождитесь вызова callbcak

 .someCallback(function () {
    var abc = ['a', 'b', 'c'];
    for (var i = 0; i < 3; i  ) {
        //closure
        var outer = function (ii) {
                alert(ii);
                var inner = function (ii) {
                    return abc[ii];
                }
                return inner(ii);
            } //closure
        return outer(i);
    }); //close loop
});
  

Я не использую никакой фреймворк, только raw .js; Я не могу получить доступ к коду вне этого обратного вызова.

Проблема либо в потере внутренней переменной, когда return outer(i) ; не удается пройти i= 0, либо пройти цикл, когда просто вызывается outer(i)

как это делается.

Комментарии:

1. Это неизбежно приведет к трем разным функциональным объектам с тремя разными возвращаемыми значениями, какой из которых вы хотите?

2. каждый раз, когда вызывается someCallBack, я хотел бы получить следующее значение: a, b, c

3. Тогда вам придется использовать для этого глобальную переменную. Это не очень рекомендуется.

4. Но тогда разве вы не должны вызывать функцию обратного вызова в цикле? Это упростило бы ситуацию

5. нет, это не вариант… (к сожалению), т. Е. Это проблема … или это невозможно, чтобы иметь динамический цикл или каким-то образом удерживать индекс цикла

Ответ №1:

Здесь не очень чисто, но работает:

 var i = 0
.someCallback(function() {
     var abc = ['a','b','c']
     //closure
     var outer = function(ii){
         alert(ii)  
         var inner = function(ii){
              return abc[ii];
            } 
     return inner(ii);
     }//closure
     i  = 1
     return outer(i-1)
});//close function and call
  

Просто надеюсь, что это поможет!

Комментарии:

1. .someCallBack вызывается нажатием клавиши. каждый раз, когда нажимается клавиша, мне нужно, чтобы возвращалось следующее значение. Первое событие возвращает a, Следующее событие возвращает b, окончательное событие возвращает c … возможно ли это?

2. Вот так, используя глобальные переменные.

3. мне нужно проверить, могу ли я поставить переменную i = 0 после обратного вызова, но я проверю это позже, и если это так, я думаю, что это работает!

4. Что случилось с полу-приличным отступом кода? Ваше решение не очень разборчиво и вводит в заблуждение из-за кода с неправильным отступом. Кроме того, куда делся for цикл, который был в вопросе OP? Я не вижу, как ваш код выполняется 3 раза, как указано в OP.

5. еще не проверял, но каждый раз, когда я нажимаю / вызываю обратный вызов, переменная i увеличивается.. это не асинхронный, я знаю, что он будет выполнен 3 раза; вот почему я пометил его как ответ..