swift - SwiftNIO 和 Vapor 中的链式投掷期货
问题描述
在 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 结果后,我似乎无法try
在我的链中使用。如果我在地图内部添加一个,map()
上面的代码将起作用,但理想情况下我想捕捉这个错误。创建响应主体时使用的第一个似乎隐式传递回链,但不是第二个。!
try
let response = try response.content.decode(ResponseModel.self)
try
我究竟做错了什么?解码响应内容时如何捕获错误?为什么第一个try
被抓到,第二个没有被抓到?
解决方案
的属性map
是它只会转换“成功路径”上的值。然而,您的转型可能会失败,这意味着您可能希望未来也失败。
每当您想使用成功或失败的函数转换值时,都需要使用其中一个flatMap*
函数。
在您的情况下,请尝试替换map
为flatMapThrowing
,然后它应该可以工作。
推荐阅读
- tensorflow - ValueError: 层 lstm_34 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到的完整形状:[无,25]
- flutter - 在 Flutter Dart Firestore 应用中实现收藏按钮
- excel - VBA代码莫名其妙地改变公式中的列
- sql - 如何在锁定步骤中在两列上应用过滤器值列表?
- swift - 如何使用 DateComponentsFormatter 将日期显示为“今天”或“昨天”?
- php - 无法在我的计算机中配置 PHP。你能检查我做错了什么吗?
- php - 针对嵌套 JSON 字段、MYSQL、PHP 的 QUERY
- google-apps-script - `clasp` 将 `.gs` 文件放在哪里?对“扣推”上的编译器错误进行故障排除
- python - 如果目标函数有太多参数,SciPy 差分进化会失败
- ios - XCode:使用始终显示点“。”的小数点。而不是逗号','