Firebase (.... ContinueWith (task => ...) в цикле For-Loop - PullRequest
0 голосов
/ 27 мая 2018

Во-первых, это код:

 for (int j = 1; j <= count; j++)
 {    
      db.Child("Some Child").GetValueAsync().ContinueWith(task =>
      {
           Debug.Log("j: " + j); // Here the Debug will show me that j = count
           if (task.IsFaulted)
           {
               // ERROR HANDLER
           }
           else if (task.IsCompleted)
           {
               // Some Code Here
            }
        });
  }

Хорошо, поэтому моя проблема в том, что после ".... ContinueWith (task => ..." 'j' станет прямо равнымпеременная count. Почему это происходит и как ее решить? Или есть другой способ сделать это?

1 Ответ

0 голосов
/ 27 мая 2018

Хорошо, моя проблема в том, что после ".... ContinueWith (task => ..." 'j' станет прямо равным переменной count. Почему это происходит и как ее решить?

Это потому, что вы использовали <= вместо <. С <=, j должно быть равно count для выполнения условия цикла и его завершения. Если вы хотитеj будет меньше count, затем используйте count-1 или просто используйте <.

Так, это должно быть

for (int j = 1; i <= count-1; j++)

Или

for (int j = 1; i < count; j++)

Обратите внимание, что массив начинается с 0, а не с 1, поэтому int j = 1; должно быть int j = 0;, но у меня такое ощущение, что вы хотели это сделать, и вы специально запускаете цикл с 1.


Наконец, еще одна проблема - захват вашей переменной в цикле, потому что вы используете лямбду в функции ContinueWith. Дополнительную информацию смотрите в этом сообщении. Использование переменной j внутри ContinueWith лямбда-функция, сделайте ее копию, затем используйте эту копию вместо переменной j.

db.Child("Some Child").GetValueAsync().ContinueWith(task =>
{

    //MAKE A COPY OF IT
    int jCopy = j;
    Debug.Log("j: " + jCopy); // Here the Debug will show me that j = count 
}

Завершено исправлено cода:

for (int j = 1; i < count; j++)
{
    db.Child("Some Child").GetValueAsync().ContinueWith(task =>
    {
        //MAKE A COPY OF IT
        int jCopy = j;
        Debug.Log("j: " + jCopy);

        if (task.IsFaulted)
        {
            // ERROR HANDLER
        }
        else if (task.IsCompleted)
        {
            // Some Code Here
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...