我正在使用Rocket框架,我想在处理程序中发出一个异步HTTP请求,如下所示
# [get("/")]
async fn handler() -> String {
some_func().await;
"OK".into()
}
结果,我得到了下一个错误
the trait `rocket::response::Responder<'_>` is not implemented for `impl core::future::future::Future`
我尝试编写实现,但是失败了。有没有办法为impl Trait实现trait?
或者指定async fn的返回类型,这样我就可以返回实现了必要特性的自定义类型。
3条答案
按热度按时间tv6aics11#
在Rocket 0.5.0发布之前,你必须使用异步路由的开发版本。值得注意的是,这也意味着你可以使用稳定的Rust来编译。
在你的货物里
一旦使用开发版本,您就可以完全按照问题中的方式编写异步路由。
请注意,不同的API可能会有所不同。请参阅https://api.rocket.rs/master/rocket/index.html以取得开发版本的文件。
vaqhlq812#
从Rocket v0.4开始,仍然不可能使用异步函数描述处理程序,尽管Rocket计划在未来迁移到完全异步的环境中(参见问题#1065)。
在这个迁移完成之前,你不能有效地处理Rocket中的future。解决办法可能包括添加你自己的执行器,并在从处理程序中出现的future完成时阻塞(这肯定不会像你所能的那样从异步中受益)。
bq9c1y663#
截至2022年,这是直截了当的:
Rocket使得在路由中使用async/await变得很容易。