【发布时间】:2020-06-19 18:57:07
【问题描述】:
在 Vapor 4 中,我通过在 3rd 方 API 上调用请求并根据我返回的结果返回一个值来处理发布请求。以下代码导致错误:“从抛出函数...到非抛出函数的无效转换”
app.post("activate") { req -> EventLoopFuture<ActivationRequestResponse> in
return req.client.post("https://api.example.com/activation", headers: HTTPHeaders(), beforeSend: { (req) in
try req.content.encode(RequestBody(value: someValue), as: .json)
})
.map { (response) -> ActivationRequestResponse in
let response = try response.content.decode(ResponseModel.self)
return ActivationRequestResponse(success: true, message: "success")
}
}
在获得 API 结果后,我似乎无法在链接的 map() 中使用 try。如果我在地图内的let response = try response.content.decode(ResponseModel.self) 中的try 中添加!,上面的代码将起作用,但理想情况下我想捕获这个错误。创建响应正文时使用的第一个 try 似乎隐式传递回链,但不是第二个。
我做错了什么?解码响应内容时如何捕获错误?为什么第一个 try 被抓到了,第二个没有被抓到?
【问题讨论】:
标签: swift xcode vapor swift5.2 swift-nio