@molekulyarniy

Разъясните этот фрагмент кода?

Объясните, пожалуйста, зачем в catchAsync передаваемая ей функция fn оборачивается дополнительно в return(req, res, next)? Почему бы сразу не использовать return fn?

обычный контроллер:
exports.signup = catchAsync(async (req, res, next) => {
   ...
   ...
});


catchAsync:
module.exports = (fn) => {
	return (req, res, next) => {
		fn(req, res, next).catch(next);
	};
};


В видеоуроке это объясняется так:
1) внутри catchAsync функция fn не видит и не может работать с req, res, next передаваемой функции. Вопрос: почему тогда return(req, res, next) может это делать?
2) если не обернуть fn в анонимную функцию с return, то вот этот фрагмент
exports.signup = catchAsync(async (req, res, next) => {
будет вызван сразу, и не будет дожидаться, пока Express к нему обратится. Вопрос: каким образом оборачивание в анонимную функцию и использование return заставит это фрагмент ждать вызова? И почему в ином случае он будет вызываться сразу?

Буду очень благодарен за ясное объяснение. Сам я как-то не могу уловить, что здесь к чему.
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Всё дело в области видимости. Ваш "обычный контроллер" не имеет доступа к переменным req, res, next, потому что они находятся в изолированном контексте и создаются только когда express делает обращение.
Поэтому вы из обычного контроллера передаёте какую-то функцию в контекст catchAsync. Там, при обращении создаются нужные переменные и они передаются в вашу функцию.
Примерно так
Ответ написан
Ваш ответ на вопрос

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

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