Должна ли функция оставаться асинхронной при применении ‘no-return-await’?

#javascript #node.js #asynchronous #promise #async-await

#javascript #node.js #асинхронный #обещание #async-await

Вопрос:

Если использование return await не требуется, должна ли функция оставаться async ?

Использование return await внутри асинхронной функции сохраняет текущую функцию в стеке вызовов до тех пор, пока ожидаемое обещание не будет выполнено, за счет дополнительной микрозадачи перед выполнением внешнего обещания

https://eslint.org/docs/rules/no-return-await

Пример 1

 async function foo() {
   return await bar();
}
  

Пример 2

 async function foo() {
    return bar();
}
  

Пример 3

 function foo() {
    return bar();
}
  

Панель

 async function bar() {
    const data = await externalCall();
    const result = anotherFunction(data);
    return resu<
}
  

Если первый пример становится вторым примером, не должен ли он фактически стать третьим примером?

Ответ №1:

Я не думаю, что пример 3 совпадает с примером 2. Асинхронность гарантирует, что функция возвращает обещание и оборачивает в него не-обещания. Смотрите https://javascript.info/async-await#:~:text=Async functionsamp;text=The word “async” before a,in a resolved promise automatically.amp;text=So, async ensures that the,wraps non-promises in it .

Комментарии:

1. В таком случае можно ли что-нибудь получить, обернув обещание в другое обещание? Конечно, это бессмысленно?

2. Я думаю, что это бессмысленно, если вы не вернете обещание.

3. Где обещание, обернутое в другое обещание?

4. Я не знаю, но я думал, что это был небольшой побочный вопрос от newprogrammer

Ответ №2:

Да, нет смысла использовать асинхронность, если функция не возвращает await.

Комментарии:

1. Это не так. AsyncFunctions имеют большое преимущество в том, что всегда возвращают обещание, даже в случае синхронного броска, который будет восприниматься вызывающим как асинхронный бросок, то есть отклоненное обещание.