我正在使用FB SDK for Unity,我发现由于需要按顺序返回的异步函数而丢失回调会很麻烦。如何抽象我的代码,以便更清晰,并从异步回调中分离我的逻辑/流程?
我的逻辑是:
这是我正在尝试做的一个伪示例:
Init()
{
LogInWithCallback(LoginResponse);
}
public LoginResponse(response)
{
if(response.loggedIn)
{
checkPermissions();
}
}
public checkPermissions(){
checkPermissionsWithCallback(permissionCheckCallback);
}
public permissionCheckCallback(ResponseDelegate)
{
//If the player doesn't have the right permissions, request them.
requestPermissions("score permission",permissionRequestCallback);
}
public permissionRequestCallback()
{
//if requesting the score permission was successful post score;
Postscore(); // <- It doesn't make sense to have logic which posts the player's score this deep down a callback chain, but I don't know any other way around.
}
答案 0 :(得分:1)
我前段时间遇到过这个问题!
尝试使用promises。这是一个获得very popular in javascript nowadays的编程模式,但它们也是available for C#。当然,如果Unity能够赶上现代C#,我们也可以使用things like await,但这是不会很快发生的事情。
一方面,他们使代码变得更容易和直接,但另一方面,他们经常使调试更难,因为在匿名代表的崩溃日志中,你得到类似m_42345的东西,而不是可读的方法名称。