【发布时间】:2021-07-04 08:15:35
【问题描述】:
我曾经在 JS 中使用箭头函数,但是在尝试解决 ExpressJS 中的异步等待问题时,我在 Google 上搜索并遇到了这个函数:
const asyncHandler = fn => (req, res, next) => {
return Promise
.resolve(fn(req, res, next))
.catch(next);
};
而且这个函数可以这样使用(在 ExpressJS 中):
app.use(asyncHandler(async(req, res, next) => {
await authenticate(req);
next();
}));
从代码中我了解到asyncHandler是一个函数,它接收另一个函数(fn),而那个函数(fn)返回另一个函数,并且在那个函数内部,调用fn。
我不明白为什么req、res、next这3个变量没有传递给fn可以用来传递给另一个函数,为什么fn可以返回一个调用fn的函数。
【问题讨论】:
-
asyncHandler 是一个高阶函数,一个中间件“工厂”。
-
我不明白你在问什么。
-
嘿,你能澄清一下你问题的最后一段吗?我无法正确理解!
-
@h-sifat 函数 fn 返回另一个函数。并且返回的函数接收 3 个参数 req、res 和 next。但是fn函数没有接收任何参数,它怎么能传递给另一个呢。
标签: javascript arrow-functions