@1233211

Почему не советуют писать await после return в функции?

так не правильно
async function getUsers(userId) {
	return await db.users.findOneById(userId);
}


а так правильно
async function getUsers(userId) {
	return db.users.findOneById(userId);
}


почему?
  • Вопрос задан
  • 462 просмотра
Решения вопроса 4
john36allTa
@john36allTa
alien glow of a dirty mind
Потому что нет try catch конструкции, а это уже deprecated по умолчанию..
Во втором случае вам промис вернётся и уже за функцией можно обрабатывать ошибку. В противном случае у вас двойная обработка(как минимум) получится
Ответ написан
SagePtr
@SagePtr
Еда - это святое
Потому что асинхронная функция возвращает промис в любом случае, конструкция await там после return излишняя
Ответ написан
Комментировать
Robur
@Robur
Знаю больше чем это необходимо
Нет "правильно" и "неправильно". Лично я раньше тоже убирал await, потом наоборот стал добавлять.
Не советуют потому что с точки зрения логики это лишнее слово.

Но, как говорится, есть нюансы. Если копнуть глубже - V8 оптимизирует return с await лучше чем просто return.
А так же конструкция с await дает лучший стектрейс. Еще что-то было в пользу return await, но я не помню детали. В блогах самого V8 или девелоперов его пилящих где-то была целая большая статья на эту тему, с раскладкой по всем деталям.

Поэтому, если вы видите return await не спешите говорит что человек написавший эти строки не в курсе как работает async/await, возможно он знает лучше вашего ;)
Ответ написан
Комментировать
Xuxicheta
@Xuxicheta
инженер
return await promise
"разворачивается" в
return promise.then(result => result);
Зачем оно вам надо?

И плюс если в функции нет ни одного await, то async ей тоже не нужен, меньше текста, меньше нагрузки на программиста и компилятор.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы