在Express.js或Node.js中,async函数是一种处理异步操作的常见方法。在声明路由中间件时,我们经常会见到两种类型的async函数:async(req,res,next)和async(req,res,()=>{})。
这两种类型的函数之间的主要区别在于第三个参数的类型。
如果第三个参数是一个指向下一个中间件函数的回调函数(通常被命名为“next”),则async函数将作为正常的中间件函数运行,并且向下一个函数传递控制权:
app.get('/example', async(req, res, next) => {
try {
// some asynchronous operation
const result = await someAsyncFunction();
res.send(result);
} catch (error) {
next(error);
}
});
如果第三个参数是一个回调函数,这意味着它不呼叫next()传递控制权,而是在此函数内部处理控制。
app.get('/example', async(req, res, done) => {
try {
// some asynchronous operation
const result = await someAsyncFunction();
res.send(result);
done();
} catch (error) {
done(error);
}
});
重新理解async函数的这种行为有助于避免混淆和错误用法。