首页 > 解决方案 > 将节点 api 函数显式声明为异步的含义?

问题描述

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

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.jsexpressasynchronous

解决方案


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

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

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

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

是的。而且,这是唯一的理由来声明它async

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

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

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

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


推荐阅读