Функция async
всегда возвращает обещание.
Но Express НЕ обращает никакого внимания на возвращаемое значение из обработчика или промежуточного программного обеспечения, которое вы передаете app.get()
, или любого другого маршрута или промежуточного программного обеспечения. регистрация.
Таким образом, вы можете использовать async
, когда вам НУЖНО использовать его, чтобы вы могли использовать await
при реализации функции. Но Expresss не обращает никакого внимания на возвращенное обещание и не будет ничего с ним делать.
Насколько я понимаю, это полезно, если вы используете await для функции внутри API.
Да. И это единственная причина, чтобы объявить это async
.
Однако, если API не нужно ничего ждать, есть ли какие-либо последствия (синтаксические или производительность), если таковые имеются, по сравнению с не вызывая эту функцию как asyn c?
Возможно, это не влияет на производительность, но вы заставляете интерпретатора делать некоторые дополнительные издержки. Он собирается поместить try/catch
вокруг вашего кода и даст новое обещание, которое подключается как к try/catch
, так и к возвращаемому значению. Так как это обещание не используется, оно просто тратит впустую циклы для интерпретатора, поскольку он должен создавать и собирать мусор для нового запроса для каждого запроса, а также будет иметь некоторые дополнительные служебные настройки, установленные внутри интерпретатора для перехвата исключений в async
функция (поскольку инфраструктура функций async
превращает исключения в отклоненное обещание).
Можно ли просто объявить каждую функцию API как asyn c
You "Можно". Но я бы сказал, что вы не должны. async
имеет несколько определенных c целей. Если ваш код не нуждается ни в одной из этих целей, я бы сказал, что вы не должны его использовать.