2017-12-15 7 views
1

여기 Unity에서 Firebase를 시작합니다. 데이터베이스에서 데이터를 가져 오는 방법을 알아 냈습니다. 그러나 문제는 데이터를 얻기 위해 내가 만들고있는 작업 외부에서 가치를 얻을 수 없다는 것입니다. 단지입니다작업 범위 밖에서 변수 값을 가져올 수 없습니다. Firebase unity

은 "Router.PlayerMoney : 여기

은 내가 사용하고있는 기능, 그래서 너희들은 지금 무엇을 말 하려는지 알고 :

public double GetBankBalance() 
{ 
    double bankBalance = 0; 
    Router.PlayerMoney("ymO6Hyl8WjbuPGaWV7FksbVABGb2").GetValueAsync().ContinueWith(task => 
    { 
    if (task.IsFaulted) 
     { 
      Debug.Log("Error in GetBankBalance()"); 
     } 
    else if (task.IsCompleted) 
     { 
      DataSnapshot snapshot = task.Result; 
      bankBalance = Convert.ToDouble(snapshot.Child("bankBalance").Value); 
     } 
     Debug.Log(bankBalance); 
     SetBankBalance(bankBalance); 
    }); 
    Debug.Log(bankBalance); 
    return bankBalance; 
} 

내가 그것을 조금 설명하겠습니다 여기에있는 문제는 Debug.Log (bankBalance)가 올바른 값을 반환하지만 BankBalance에 값을 주었을 때 그 값이 0 인 것입니다 (내 반환 값 위에있는 Debug.Log). 기능의 시작.

나는 생각할 수 없다. 문제가 무엇인지 알아 내라. 인스턴스 변수를 시도했지만 작동하지 않습니다.

누구에게 어떤 문제가있을 수 있습니까?

+1

을 말할 수 있어야한다 : 즉, 실제로 차이를 설명한다 bankBalance

이 값을 변경하기 전에 작업 외부 Debug.Log가 실행하는 말을하는 것입니다 라이브러리에 대해 많이 모르지만 GetValueAsync() 함수의 이름을 기반으로 두 번째 Debug.Log는 은행 잔액을 받고있는 비동기 방식 때문에 첫 번째 전에 실행된다고 가정합니다. – Laslos

+2

GetValueAsync 작업이 완료 될 때까지 -이 작업이 완료 될 때까지 기다리지 않으므로 제어 흐름이 이미 GetBankBalance 메서드를 벗어났습니다. – Evk

답변

0

작업이 비동기 적으로 실행되고있는 것 같습니다.

int val = 0; 

Task t = Task.Factory.StartNew(() => 
{ 
    val = 10; 
}); 

Console.WriteLine(val); // Writes 0 

Task.WaitAll(t); 

Console.WriteLine(val); // Writes 10 

하는 당신은 그러므로

double balance = 0; 
Task t = Router.PlayerMoney(...).GetValueAsync().ContinueWith(task => 
{ 

    // do stuff 

}); 

Task.WaitAll(t); 
return bankBalance; 
+0

알았어, 고마워. 하지만 실제로 코드를 구현하는 가장 좋은 방법은 무엇인지 모르겠습니다. 나는 C를 처음 사용했다. # – Jonas

+0

나는 [ContinueWith]가 [이 문서]에 표시된대로'Task'를 반환한다고 가정하고 대답을 업데이트했다. (https://msdn.microsoft.com/en-us/library/dd321405 (v = vs.110) .aspx). – Xeraqu

+0

WaitAll 메서드를 사용할 수 없습니까? System.Threading.Task에 using 문을 추가했지만 WaitAll 메서드가 계속 "WaitAll에 대한 정의가 포함되지 않은 작업"을 계속 나타냅니다. – Jonas