繁体   English   中英

如何整理嵌套的回调?

[英]How do I neaten up nested callbacks?

我使用的是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.
 }

我自己在一段时间前就遇到了这个问题!

尝试使用Promise 这是一种编程模式, 如今在javascript中变得非常流行 ,但它们也可用于C# 当然,如果Unity能够赶上现代C#,我们也可以使用await之类的东西,但这不会很快发生。

一方面,它们使代码变得更加容易和直接,但另一方面,它们通常使调试更加困难,因为在崩溃日志中,对于匿名委托,您会得到类似于m_42345之类的东西,而不是可读的方法名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM