Как правильно использовать функцию async / await? - PullRequest
0 голосов
/ 28 октября 2018

Я работаю на сервере node.js с экспрессом.Я обрабатываю запрос POST следующим образом:

app.post('/signup', async (req, res) => {
    let user = {
        email: req.body.userEmail,
        pass: req.body.userPass
    }
    try {
        let insertedUser = await User.create(user)
        console.log(insertedUser.get('email'))
    } catch (err) {
        console.log(`ERROR! => ${err.message}`)
    }
})

Чтобы он работал, я должен поставить async перед функцией обратного вызова.Но зачем мне это делать, если app.post() уже является асинхронной функцией?

Правильно ли я работаю с async / await?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Вы работаете правильно (за исключением того факта, что вы не используете res для ответа на запрос).

Причина, по которой вам нужно использовать async, заключается в том, что подпись app.post() is

app.post(path: string, handler: (req: Request, res: Response) => void): void

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

Как видите, app.post() на себя не имеет интересного возвращаемого значения (и особенно, оно не возвращает обещание), поэтому оно не являетсяФункция async сама по себе.

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


TL; DR - ваша функция-обработчик асинхронная, app.post() не.

0 голосов
/ 28 октября 2018

Этот async/await не имеет ничего общего с app.post() асинхронностью, поскольку async / await - это функция, представленная в ES5 + для синхронной обработки асинхронных вызовов в функциях.Думайте об этом как о расширенной версии Обещаний, просто она выглядит как Синхронная, но делает то же самое.Таким образом, ваш код выглядит правильно для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...