javascript - 在 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
函数可以让您await
在使用 Promise 时使用,这使得使用熟悉的流控制结构编写代码逻辑而不是在回调中编写所有内容成为可能。
但是,由于 Express 不会对您返回的承诺做任何事情,因此将回调中的所有内容都try
包装在/中很重要catch
(如您的问题所示)。否则,代码中的错误/承诺拒绝将导致未处理的承诺拒绝。
你可能会看看Koa,它来自于制作 Express 的同一个人,它是为使用 Promise 而构建的。
推荐阅读
- bash - How to add xfce4-panel plugin to the specific panel via terminal?
- python - 如何在python中为两个for循环获得一行输出?
- laravel - 为什么会议详情页面没有出现图片?
- swift - Swift 4 - 获得按钮宽度的一半
- java - Clip 可以播放 mp3,但 OpenAL 只提供静音(Java)
- android-studio - Android Gradle 同步失败问题 Android Studio 3.1.4 & gradle 4.4
- css - Bootstrap 似乎弄乱了我的导航栏
- c# - 将 NextResult 函数与 datareader 一起使用时出错
- javascript - 从 API 数据分配嵌套数组对象
- javascript - if 和 else 都在嵌套循环中执行