gpt4 book ai didi

swift - SwiftNIO 和 Vapor 中的链式 throw future

转载 作者:行者123 更新时间:2023-12-05 01:37:43 26 4
gpt4 key购买 nike

在 Vapor 4 中,我通过在第 3 方 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 中添加 ! ,上面的代码将起作用 map ,但理想情况下我想捕获此错误。创建响应主体时使用的第一个 try 似乎隐式传回链中,但第二个不是。

我做错了什么?如何在解码响应内容时捕获错误?为什么第一个 try 被捕获但第二个没有被捕获?

最佳答案

map 的特性是它只会转换“成功路径”上的值。然而,您的转型可能会失败,这意味着您可能希望 future 也失败。

每当您想使用成功或失败的函数转换值时,您需要使用 flatMap* 函数之一。

在您的情况下,尝试将 map 替换为 flatMapThrowing,然后它应该可以工作。

关于swift - SwiftNIO 和 Vapor 中的链式 throw future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60574239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com