在REST中使用异步函数的原因是什么



我正在用express.js路由器制作一个RESTful API。因此,我有以下代码(很抱歉,如果它不好,我正在学习(:

router.route('/')
.get(async (req, res) => {
try {
return await User.find(users => res.json(users))
} catch(err) {
return res.status(400).json('Error: ' + err)
}
})

在这种情况下有异步函数的原因吗?或者我可以通过使用这样的东西来应付吗

router.route('/')
.get((req, res) => {
User.find((err, users) => {
if(err){
res.send(err)
}
else {
res.send(users)
}
})

使用async函数可以在使用promise时使用await,这样就可以使用熟悉的流控制结构来编写代码的逻辑,而不是在回调中编写所有内容。

但是,由于Express不会对您返回的承诺执行任何操作,因此在回调中用try/catch包装所有内容非常重要(如您的问题所示(。否则,代码中的错误/承诺拒绝将导致未处理的承诺拒绝。

你可能会看到Koa,来自《快报》的同一批人,《快报》是为兑现承诺而建的。

对于单个await,那么这两种形式可能没有区别。然而,当您必须处理两个或多个异步函数时,事情会变得更难(阅读(。在这种情况下,我强烈建议使用async/await模式,而不是回调模式。

最新更新