Fire Base数据库循环的C#脚本不是逻辑
我在Unity中获得了这个FireBase数据库查询脚本,以返回JSON数据库中的行数 我不理解它在脚本中循环的方式,我想在它完成循环但不工作后调用函数Fire Base数据库循环的C#脚本不是逻辑,c#,firebase,unity3d,firebase-realtime-database,C#,Firebase,Unity3d,Firebase Realtime Database,我在Unity中获得了这个FireBase数据库查询脚本,以返回JSON数据库中的行数 我不理解它在脚本中循环的方式,我想在它完成循环但不工作后调用函数CalledFunction()。。。它总是在运行时拾取该函数。为什么在它完全进入和退出函数之前,它会到达“输入4” 请注意,访问数据库时会忽略日志中的错误 public void Start() { Debug.Log("IN 0"); // Get the root reference location o
CalledFunction()
。。。它总是在运行时拾取该函数。为什么在它完全进入和退出函数之前,它会到达“输入4”
请注意,访问数据库时会忽略日志中的错误
public void Start()
{
Debug.Log("IN 0");
// Get the root reference location of the database
FirebaseDatabase.GetInstance("https://THISISMYDATABASEPRIVATELINK.com").GetReference("COUNT LIST").GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
Debug.Log("ERROR IN FIREBASE LINK ACCESS");
}
else if (task.IsCompleted)
{
Debug.Log("IN 1");
DataSnapshot snapshot = task.Result;
string count = snapshot.ChildrenCount.ToString();
Debug.Log("STRING COUNT : " + count);
FireBaseData.intcount = System.Int32.Parse(count);
Debug.Log("IN 2");
}
Debug.Log("IN 3");
});
Debug.Log("IN 4");
CalledFunction();
}
public void CalledFunction()
{
Debug.Log("This is Something Else");
}
这是我的输出日志
正如名字所说,
GetValueAsync
是异步执行的。。意思是在一个不同的(类似于线程)和它本身是一个非阻塞调用
因此,线路
Debug.Log("IN 4");
CalledFunction();
不是延迟而是立即到达并执行
如果您想等待调用
CalledFunction
直到返回数据库结果,您更愿意做的是将方法调用移动到异步任务的等待器中
对于Unity特定,请确保不要使用ContinueWith
,而是使用扩展方法,该方法还可以确保在Untiy主线程中执行回调,这样您就可以使用Unity API而不会出现线程问题
public void Start()
{
Debug.Log("IN 0");
// Get the root reference location of the database
FirebaseDatabase.GetInstance("https://THISISMYDATABASEPRIVATELINK.com").GetReference("COUNT LIST").GetValueAsync().ContinueWithOnMainThread(task =>
{
if (task.IsFaulted)
{
Debug.Log("ERROR IN FIREBASE LINK ACCESS");
}
else if (task.IsCompleted)
{
Debug.Log("IN 1");
DataSnapshot snapshot = task.Result;
string count = snapshot.ChildrenCount.ToString();
Debug.Log("STRING COUNT : " + count);
FireBaseData.intcount = System.Int32.Parse(count);
Debug.Log("IN 2");
CalledFunction();
}
});
}
public void CalledFunction()
{
Debug.Log("This is Something Else");
}
你的回答是有道理的,但现在我错过了一些别的。。。Assets\Scripts\FireBaseData.cs(27113):错误CS1061:“DatabaseReference”不包含“ContinueWithInMainThread”的定义,并且找不到可访问的扩展方法“ContinueWithInMainThread”接受类型为“DatabaseReference”的第一个参数(是否缺少using指令或程序集引用?)您可能忘记了
GetValueAsync
?我忘记了,没错,我还将ContinueWithInMainThread更改为ContinueWithInMainThread您是否可以将您的问题作为文本而不是屏幕截图包含日志输出?此处要求不要将图像用于文本内容,请参阅和了解原因。但我认为在调用CalledFunction()
之前,您需要等待该任务,例如,使用另一个ContinueWith()
或重新构造Start())
方法为异步
并直接等待它。如果需要在主线程上继续,请参阅。有关Unity3d/Firebase中异步任务的一般说明,请参阅