代码之家  ›  专栏  ›  技术社区  ›  Sandervg03

为什么我要使用回调而不是等待?

  •  1
  • Sandervg03  · 技术社区  · 1 年前

    我为一个项目写了下面的代码,我在这个项目中做所有与用户相关的事情。在这里,我的服务文件中有一小部分代码。

    let result: User | null = await userModel.registerUser();
    return result;
    

    作为我的小组的反馈,我收到了:“使用回调函数而不是等待更好的练习。”这真的让我很困惑,因为为什么回调函数会比简单地使用等待函数更好。一旦userModel.registerUser()给出响应,结果将返回给控制器,一切正常。Await占用的空间更少,可读性对我来说更好。

    我已经将代码更改为如下(错误处理也在userMode.registerUser()中根据数据库的响应进行,因此为_):

    userModel.registerUser(function(_, result) {
        return result;
    });
    

    这是有效的,但我看不出这有什么更好的。

    1 回复  |  直到 1 年前
        1
  •  -1
  •   Kyle Xyian Dilbeck    1 年前

    披露:我需要更多的背景来给你一个明确的答案,哪个更好,为什么更好。

    您提供的初始代码使用async/await IS是一种更现代、更可读的方法 处理异步操作 .

    然而,在某些情况下,使用回调可能是首选、更好甚至是必需的 取决于项目的上下文和具体要求。

    例如,如果您正在更改状态或需要缓存函数以避免不必要的重新渲染,则会专门进行回调以解决这些问题, see documentation here

    但是,如果您只是在等待诸如api调用之类的响应,那么async/await肯定会更好。

    同样,我需要查看代码实现,以便给你一个明确的答案,如果哪一个更适合你的特定用例,但以下是两种方法的一些其他考虑因素:

    异步/等待:

    • 可读性:异步/等待代码往往更具可读性,类似于 同步代码,使其更易于理解。
    • 错误处理:使用async/await,可以使用try/catch块 更好的错误处理,使处理更加简单 例外情况。

    回调:

    • 兼容性:在某些场景或库中,回调可能是 处理异步操作的首选方式。
    • 控制流:回调可以对的流提供更多的控制 你的程序 在某些情况下。

    在你的情况下,如果同事的反馈建议使用回调,那么了解其背后的具体原因可能是有益的 在特定情况下可以是适当的或更好的 ,但通常使用 async/await被认为是一种更现代、可读性更强的方法 .

    如果使用async/await的代码运行良好并且易于理解, 可能不太需要切换到回调 .

    还要注意,如果你的同事是遗留开发人员(比如一直在那里工作的老家伙),他们可能会认为应该使用回调,因为他们不知道得更好,或者因为回调已经存在了一段时间,所以一直都是这样做的。这就是为什么我也建议 再次提出这个问题 有一个 关于哪一个更好的健康辩论 ,只要确保做一些研究,这样你就可以解释为什么async/await更好——这样你就能帮助他们成为现代开发人员!