Учитывая, что используются обещания, синхронные и асинхронные ошибки можно последовательно обрабатывать с помощью функции async
:
export async function index(req: Request, res: Response, next: NextFunction) {
try {
if(!config.braintree)
throw new Error('Braintree configuration missing.');
const gateway: any = braintree.connect(config.braintree);
const response = await gateway.clientToken.generate({})
res.send(response.clientToken);
} catch (err) {
next(err);
}
}
Поскольку Express не поддерживает обещания, тело функции async
должно быть перенесенос try..catch
.Учитывая, что try..catch
является общим для всех async
функций промежуточного программного обеспечения, его можно переместить в помощник:
const asyncMiddleware = (middleware: RequestHandler) => async (req: Request, res: Response, next: NextFunction) => {
try {
await middleware(req, res, next);
} catch (err) {
next(err)
}
};
, который используется как:
export const index = asyncMiddleware(async (...) => {...});