首页 > 解决方案 > 在 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)
            }
        })

标签: javascriptrestexpress

解决方案


使用async函数可以让您await在使用 Promise 时使用,这使得使用熟悉的流控制结构编写代码逻辑而不是在回调中编写所有内容成为可能。

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

你可能会看看Koa,它来自于制作 Express 的同一个人,它是为使用 Promise 而构建的。


推荐阅读