Если предположить, что не содержится в функции async
, эквивалент async
/ await
будет:
(async() => {
try {
await authorizedApi(jwtClient);
await sendContactMessage(gmailAPI, encodedContactMessage);
await findContact(
googlePeopleAPI.connections,
googleConnectionListParams,
sender.email
);
await createContact(googlePeopleAPI, googlePeopleContactParams);
res.send({ status: 200, infos: "done" });
} catch (error) {
res.send({ status: error.status, infos: error.message });
}
))();
Это проще и стоит внести измененияочевидно, зависит от вас.
(Из вашего кода я понимаю, что когда обещания, возвращаемые этими функциями, отклоняются, объект, который они предоставляют, имеет status
.)
Обратите внимание, чтоЯ не поставил try
/ catch
вокруг последнего res.send
.Я не думаю, что он выбрасывает, но у вас есть обработчик catch
.Так что, если он выдает, вы захотите вернуть его обратно.
Если вы уже уже в функции async
, очевидно, вам не нужна эта оболочка async
:
try {
await authorizedApi(jwtClient);
await sendContactMessage(gmailAPI, encodedContactMessage);
await findContact(
googlePeopleAPI.connections,
googleConnectionListParams,
sender.email
);
await createContact(googlePeopleAPI, googlePeopleContactParams);
res.send({ status: 200, infos: "done" });
} catch (error) {
res.send({ status: error.status, infos: error.message });
}
По res.send
кажется, что вы используете экспресс-фреймворк - поэтому вы можете сделать обработчик асинхронной оболочкой, достаточно поставить async
слово перед (req, res)
:
app.get('/something', async (req, res) => {
try {
/*
await stuff here
*/
res.send({ status: 200, infos: "done" });
} catch (error) {
res.send({ status: error.status, infos: error.message });
}
});
Обратите внимание, что как в приведенном выше, так и в обертке async
в первом блоке кода тело whole находится в try
(кроме res.send
в случае ошибки).Это потому, что ничто не будет обрабатывать обещание из функции async
(Express ничего не делает с возвращаемым значением обратных вызовов маршрута), поэтому важно, чтобы обещание не отклонялось.