В чем причина использования функций asyn c с REST? - PullRequest
1 голос
/ 24 апреля 2020

Я делаю RESTful API с express. js роутером. Итак, у меня есть следующий код (извините, если это плохо, я учусь):

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

Есть ли причина для использования асин c функций в этом случае, или я мог бы получить просто используя что-то вроде:

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

Ответы [ 2 ]

3 голосов
/ 24 апреля 2020

Использование функции async позволяет использовать await при использовании обещаний, что позволяет записывать лог c вашего кода, используя знакомые конструкции управления потоком, а не записывать все в обратных вызовах.

Но , поскольку Express ничего не делает с обещанием, которое вы возвращаете, важно обернуть все в ваш обратный вызов в try / catch (как показано в твоем вопросе). В противном случае отклонение ошибки / обещания в вашем коде приведет к необработанному отклонению обещания.

Вы можете посмотреть на Коа от тех же людей, которые сделали Express, который построен для работа с обещаниями.

2 голосов
/ 24 апреля 2020

Для одного await, то, вероятно, нет никакой разницы для двух форм. Однако все становится сложнее (читать), когда вам приходится иметь дело с двумя или более асинхронными функциями. В таких случаях я настоятельно рекомендую шаблон async / await, чем шаблон обратного вызова.

...