我正在尝试在Unity项目中创建“使用Facebook登录”流程。 我正在使用Facebook SDK和Firebase来验证用户数据并将其存储在在线数据库中。
仅当用户不存在时才需要更新数据库。所以我在用协程
public void someCodeHere(params){
StartCoroutine(waitForTask(task, uid, name, email));
}
IEnumerator waitForTask(Task<DataSnapshot> task, string uid, string name, string email)
{
while(!task.IsCompleted)
{
Debug.Log("Wait task to coplete");
yield return new WaitForSeconds(1);
}
Debug.Log(task.Result.GetRawJsonValue());
if(task.Result.GetRawJsonValue() == null || task.Result.GetRawJsonValue() == "")
{
HardUpdateUser(uid, name, email);
}
else
{
SetExistingUser(task);
}
}
SetExistingUser可以在编辑器和设备上完美运行, 但是HardUpdateUser(uid,name,email);在设备上无法正常运行,但在统一编辑器中可以完美运行。
下面是函数内的代码:
var status = reference.Child("users").Child(userId).SetRawJsonValueAsync(json).ContinueWith(task =>
{
if (task.IsCanceled)
{
Debug.LogError("CreateUpdateUserInDB was canceled.");
return;
}
if (task.IsFaulted)
{
Debug.LogError("CreateUpdateUserInDB encountered an error: " + task.Exception);
return;
}
Debug.LogFormat("User CreateUpdateUserInDB successfully: {0} ({1})",
user.userName, userId);
});
答案 0 :(得分:0)
所以。我没有日志,因为我没有足够的时间,我想我很懒。 无论如何,我找到了解决该问题的方法。
我没有提到的事情是,我在另一个协程(当然在另一个库鲁汀内)中启动协程# n1, n2 = cell numbers
cellsize = 100.0
x1,x2 = n1%gs, n2%gs
y1,y2 = n1//gs, n2//gs
dist = sqrt( float(x1-x2)**2 + float(y1-y2)**2) # pythagoras theorem
dist *= cellsize
。所以我有很多库鲁尼。他们中的大多数人都在等待来自先前功能等的某些对象。我在while循环中使用了一些计数器。例如
StartCoroutine(waitForTask(task, uid, name, email));
并且等待变量通常是少量协程的一个。 所以我改变了:
while(obj == null && wait > 0) {
wait--;
yield return new WaitForSceonds(1);
}
wait = 15;
//run next coroutine
)因此,我的根本问题不在问题中提到的代码中。
找到时间调查Android日志并弄清协程堆积的原因后,我会更新答案。
这是带有时间戳的示例:
task.IsCompleted