【问题标题】:Implications for explicitly declaring node api function as asynchronous?将节点 api 函数显式声明为异步的含义?
【发布时间】:2020-01-09 04:50:35
【问题描述】:

给定一个 node express 应用程序,我们可以使用 'async' 将 api 中的函数声明为异步。

app.get(/v1/user', async function(request, response) {
    response.status(200).send({ message: messageReturn });
});

据我了解,如果您在 api 内的函数上使用 await,这很有用。但是,如果 api 不需要等待任何东西,与不将此函数调用为 async 相比,是否有任何影响(语法或性能)(如果有)?即我可以将每个 api 函数声明为异步而不是

app.get(/v1/user', function(request, response) {
    response.status(200).send({ message: messageReturn });
});

【问题讨论】:

    标签: node.js express asynchronous


    【解决方案1】:

    async 函数总是返回一个承诺。

    但是,Express 不会关注您通过 app.get() 或任何其他路由或中间件注册的处理程序或中间件的返回值。

    因此,您可以在需要使用async 时使用它,这样您就可以在函数的实现中使用await。但是,Expresss 并没有关注返回的承诺,也不会对它做任何事情。

    据我了解,如果您在 api 内的函数上使用 await,这很有用。

    是的。而且,这是声明它的唯一原因async

    但是,如果 api 不需要等待任何东西,与不将此函数调用为异步相比,是否有任何影响(语法或性能)(如果有)?

    可能对性能没有影响,但您会迫使解释器做一些额外的开销。它会在你的代码周围放置一个try/catch,它会做出一个新的promise,它与try/catch 和返回值挂钩。由于没有使用该承诺,它只是浪费了解释器的周期,因为它必须为每个请求创建和垃圾收集一个新的承诺对象,并且它还将在解释器内部有一些额外的设置开销来捕获 async 中的异常函数(因为异常会被async 函数基础结构转化为拒绝的承诺)。

    我可以将每个 api 函数声明为异步吗

    你“可以”。但是,我认为你“不应该”。 async 有几个特定的​​目的。如果您的代码不需要任何这些目的,那么我认为您不应该使用它。

    【讨论】:

      猜你喜欢
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 2022-11-25
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多