在For-Loop中的Firebase(.... ContinueWith(task => ...)

时间:2018-05-26 22:16:36

标签: firebase for-loop unity3d firebase-realtime-database

首先,这是代码:

 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
            }
        });
  }

好的,所以我的问题是&#34; .... ContinueWith(task =&gt; ...&#34;&#39; j&#39;将直接等于count变量为什么会发生这种情况以及如何解决呢?或者还有另一种方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

  

好的,所以我的问题是在&#34; .... ContinueWith之后(task =&gt; ...&#34;&#39; j   &#39;将直接等于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}开始循环故意。

最后,另一个问题是你的变量是在循环中捕获的,因为你在1函数中使用了lambda。有关详细信息,请参阅this帖子。要在ContinueWith lambda函数中使用j变量,请复制它,然后使用该副本而不是j变量。

ContinueWith

完整的固定代码:

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 
}