我正在使用以下 actix 处理程序:
fn callback(info: web::Query<CallbackInfo>, session: Session) -> impl Future<Item = HttpResponse, Error = actix_web::Error>
在这个函数中,我做了一些分支,有时我会返回:
web::block(|| Result::<Backup, String>::Ok(run_backup(token_info)))
.from_err()
.map(|backup| HttpResponse::Ok().json(backup))
其他时候我回来:
let r = HttpResponse::Found()
.set_header(http::header::LOCATION, "/")
.finish();
futures::future::ok(r)
哪个无法编译
expected struct `futures::future::map::Map`, found struct `futures::future::result_::FutureResult`
我想我明白这一点,尽管这很奇怪,.map
它不会返回另一个未来。但是我怎样才能统一这两个时间,以便我可以将它们用作返回类型?
更新:有人建议这是重复的:为什么 impl trait 不能用于返回多个/条件类型?但是那个问题并没有解决这个问题,它只是描述了为什么会发生这种情况。我看到问题出在 上impl Future
,但我无法更改它,因为我使用的是 actix-web,它需要这个签名,或者我无法找到的类似签名,因此我问这个问题。