У меня есть следующий раздел кода в контроллере, который запрашивает MailGun для отправки электронной почты, а затем в идеале должен дождаться ответа, прежде чем вернуться в контроллер. Как настроено прямо сейчас, этот должен завершиться сбоем, поскольку я намеренно сломал свою конфигурацию MailGun. Но в настоящее время контроллер возвращает статус успеха, потому что функции .catchMap
не ожидаются должным образом, и я не уверен, как правильно структурировать мой код таким, какой он есть.
return emailTemplate.render(emailData, on: req).map { message -> Future<Response> in
let deliveryService = try req.make(EmailDeliveryService.self)
return try deliveryService.send(message, on: req)
}.catchMap { error in
/// this is not being awaited, and no abort is thrown before the request returns
throw Abort(.internalServerError, reason: "Error sending email.")
}.transform(to: savedObj)
Функция, которая должна ожидаться должным образом, deliverService.send
, имеет сигнатуру метода:
func send(_ message: EmailMessage, on container: Container) throws -> Future<Response>
Как правильно структурировать этот код, чтобы правильно перехватить ошибку, возвращаемую результатом метода deliveryService.send
?